Results Study 2: Self-Improvement and Self-Acceptance as Mechanisms of Positive Personality Change

Author

[blinded]

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)
library(effectsize)
library(wordcloud) # these 3 for the word clouds
library(RColorBrewer)
library(tm)

2 Data cleaning

Show the code
source("clean_data_st2.R")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa2_wide_wb <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa2_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 23 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                              2451.486
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              5903.003
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.587
  Tucker-Lewis Index (TLI)                       0.470
                                                      
  Robust Comparative Fit Index (CFI)             0.587
  Robust Tucker-Lewis Index (TLI)                0.470

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14719.920
  Loglikelihood unrestricted model (H1)     -13494.177
                                                      
  Akaike (AIC)                               29499.840
  Bayesian (BIC)                             29642.091
  Sample-size adjusted Bayesian (SABIC)      29546.820

Root Mean Square Error of Approximation:

  RMSEA                                          0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.222

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.478    0.050   29.760    0.000
    m01_02_ (lmb2)   -0.453    0.053   -8.581    0.000
    m01_03_ (lmb3)   -0.312    0.055   -5.697    0.000
    m01_04_ (lmb4)    1.586    0.048   33.354    0.000
    m01_05_ (lmb5)    1.442    0.049   29.455    0.000
    m01_06_ (lmb6)    1.527    0.050   30.720    0.000
    m01_07_ (lmb7)   -0.284    0.055   -5.202    0.000
    m01_08_ (lmb8)   -0.444    0.057   -7.749    0.000
    m01_09_ (lmb9)   -1.460    0.059  -24.872    0.000
    m01_10_ (lm10)   -0.835    0.058  -14.334    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.156    0.060   68.803    0.000
   .ml01_02_1         5.347    0.052  103.093    0.000
   .ml01_03_1         5.123    0.053   96.752    0.000
   .ml01_04_1         3.973    0.060   65.761    0.000
   .ml01_05_1         4.483    0.059   75.615    0.000
   .ml01_06_1         3.970    0.061   64.910    0.000
   .ml01_07_1         5.086    0.053   96.700    0.000
   .ml01_08_1         5.026    0.056   90.118    0.000
   .ml01_09_1         3.880    0.067   57.625    0.000
   .ml01_10_1         4.885    0.060   82.075    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.905    0.054   16.872    0.000
   .ml01_02_t1        2.073    0.102   20.396    0.000
   .ml01_03_t1        2.277    0.111   20.495    0.000
   .ml01_04_t1        0.576    0.042   13.801    0.000
   .ml01_05_t1        0.898    0.053   16.956    0.000
   .ml01_06_t1        0.836    0.052   16.215    0.000
   .ml01_07_t1        2.263    0.110   20.510    0.000
   .ml01_08_t1        2.438    0.119   20.416    0.000
   .ml01_09_t1        1.706    0.091   18.665    0.000
   .ml01_10_t1        2.304    0.115   20.001    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 meaning1 =~ ml01_04_t1 =~    lambda4     1.59     0.0475   0.902
 2 meaning1 =~ ml01_06_t1 =~    lambda6     1.53     0.0497   0.858
 3 meaning1 =~ ml01_01_t1 =~    lambda1     1.48     0.0497   0.841
 4 meaning1 =~ ml01_09_t1 =~    lambda9    -1.46     0.0587  -0.745
 5 meaning1 =~ ml01_05_t1 =~    lambda5     1.44     0.0489   0.836
 6 meaning1 =~ ml01_10_t1 =~    lambda10   -0.835    0.0583  -0.482
 7 meaning1 =~ ml01_02_t1 =~    lambda2    -0.453    0.0528  -0.300
 8 meaning1 =~ ml01_08_t1 =~    lambda8    -0.444    0.0573  -0.273
 9 meaning1 =~ ml01_03_t1 =~    lambda3    -0.312    0.0548  -0.203
10 meaning1 =~ ml01_07_t1 =~    lambda7    -0.284    0.0545  -0.185

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2,
         ml01_09_t3_r = ml01_09_t3,
         ml01_10_t3_r = ml01_10_t3,
         ml01_02_t3_r = ml01_02_t3,
         ml01_08_t3_r = ml01_08_t3,
         ml01_07_t3_r = ml01_07_t3,
         ml01_03_t3_r = ml01_03_t3) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_03_t1_r, ml01_07_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_06_t1, ml01_05_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_01_t1, ml01_09_t1_r, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_03_t2_r, ml01_07_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_06_t2, ml01_05_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_01_t2, ml01_09_t2_r, ml01_02_t2_r)), na.rm=T),
         meaning_par1_t3 = rowMeans(across(c(ml01_04_t3, ml01_10_t3_r, ml01_03_t3_r, ml01_07_t3_r)), na.rm=T),
         meaning_par2_t3 = rowMeans(across(c(ml01_06_t3, ml01_05_t3, ml01_08_t3_r)), na.rm=T),
         meaning_par3_t3 = rowMeans(across(c(ml01_01_t3, ml01_09_t3_r, ml01_02_t3_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 15 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               493.618
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4386.991
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.894
  Tucker-Lewis Index (TLI)                       0.864
                                                      
  Robust Comparative Fit Index (CFI)             0.894
  Robust Tucker-Lewis Index (TLI)                0.864

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11502.923
  Loglikelihood unrestricted model (H1)     -11256.114
                                                      
  Akaike (AIC)                               23065.846
  Bayesian (BIC)                             23208.097
  Sample-size adjusted Bayesian (SABIC)      23112.827

Root Mean Square Error of Approximation:

  RMSEA                                          0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.867    0.036   23.906    0.000
    r01_02_ (lmb2)   -0.997    0.042  -23.899    0.000
    r01_03_ (lmb3)    0.501    0.028   17.737    0.000
    r01_04_ (lmb4)    0.571    0.033   17.507    0.000
    r01_05_ (lmb5)   -0.932    0.039  -23.875    0.000
    r01_06_ (lmb6)   -1.063    0.041  -26.027    0.000
    r01_07_ (lmb7)    0.702    0.033   20.966    0.000
    r01_08_ (lmb8)   -0.619    0.041  -14.943    0.000
    r01_09_ (lmb9)   -1.150    0.039  -29.187    0.000
    r01_10_ (lm10)    0.979    0.035   27.592    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    3.034    0.041   74.189    0.000
   .rs01_02_1         3.174    0.047   67.592    0.000
   .rs01_03_1         3.947    0.030  132.913    0.000
   .rs01_04_1         3.824    0.034  111.837    0.000
   .rs01_05_1         2.789    0.044   63.327    0.000
   .rs01_06_1         3.223    0.047   68.318    0.000
   .rs01_07_1         3.648    0.036  100.087    0.000
   .rs01_08_1         3.816    0.042   89.803    0.000
   .rs01_09_1         2.653    0.047   56.001    0.000
   .rs01_10_1         3.218    0.042   76.962    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.665    0.036   18.392    0.000
   .rs01_02_t1        0.873    0.048   18.258    0.000
   .rs01_03_t1        0.496    0.025   19.518    0.000
   .rs01_04_t1        0.665    0.034   19.560    0.000
   .rs01_05_t1        0.774    0.042   18.468    0.000
   .rs01_06_t1        0.755    0.043   17.571    0.000
   .rs01_07_t1        0.632    0.033   18.965    0.000
   .rs01_08_t1        1.146    0.058   19.925    0.000
   .rs01_09_t1        0.577    0.036   16.228    0.000
   .rs01_10_t1        0.523    0.031   17.066    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                  op    label    estimate std.error std.all
   <chr>                 <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 selfes1 =~ rs01_09_t1 =~    lambda9    -1.15     0.0394  -0.834
 2 selfes1 =~ rs01_06_t1 =~    lambda6    -1.06     0.0409  -0.774
 3 selfes1 =~ rs01_02_t1 =~    lambda2    -0.997    0.0417  -0.730
 4 selfes1 =~ rs01_10_t1 =~    lambda10    0.979    0.0355   0.804
 5 selfes1 =~ rs01_05_t1 =~    lambda5    -0.932    0.0390  -0.727
 6 selfes1 =~ rs01_01_t1 =~    lambda1     0.867    0.0363   0.729
 7 selfes1 =~ rs01_07_t1 =~    lambda7     0.702    0.0335   0.662
 8 selfes1 =~ rs01_08_t1 =~    lambda8    -0.619    0.0414  -0.500
 9 selfes1 =~ rs01_04_t1 =~    lambda4     0.571    0.0326   0.573
10 selfes1 =~ rs01_03_t1 =~    lambda3     0.501    0.0283   0.580

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2,
         rs01_09_t3_r = rs01_09_t3,
         rs01_06_t3_r = rs01_06_t3,
         rs01_02_t3_r = rs01_02_t3,
         rs01_05_t3_r = rs01_05_t3,
         rs01_08_t3_r = rs01_08_t3) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_01_t1, rs01_04_t1, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_05_t1_r, rs01_08_t1_r)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_02_t1_r, rs01_10_t1, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_01_t2, rs01_04_t2, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_05_t2_r, rs01_08_t2_r)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_02_t2_r, rs01_10_t2, rs01_07_t2)), na.rm=T),
         selfes_par1_t3 = rowMeans(across(c(rs01_09_t3_r, rs01_01_t3, rs01_04_t3, rs01_03_t3)), na.rm=T),
         selfes_par2_t3 = rowMeans(across(c(rs01_06_t3_r, rs01_05_t3_r, rs01_08_t3_r)), na.rm=T),
         selfes_par3_t3 = rowMeans(across(c(rs01_02_t3_r, rs01_10_t3, rs01_07_t3)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 32 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               430.284
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4809.241
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.921
  Tucker-Lewis Index (TLI)                       0.903
                                                      
  Robust Comparative Fit Index (CFI)             0.921
  Robust Tucker-Lewis Index (TLI)                0.903

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15026.110
  Loglikelihood unrestricted model (H1)     -14810.968
                                                      
  Akaike (AIC)                               30124.220
  Bayesian (BIC)                             30294.921
  Sample-size adjusted Bayesian (SABIC)      30180.596

Root Mean Square Error of Approximation:

  RMSEA                                          0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.987
                                                      
  Robust RMSEA                                   0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.987

Standardized Root Mean Square Residual:

  SRMR                                           0.040

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.939    0.040   23.441    0.000
    s01_02_ (lmb2)    1.028    0.042   24.709    0.000
    s01_03_ (lmb3)    0.965    0.041   23.263    0.000
    s01_04_ (lmb4)    1.030    0.041   25.217    0.000
    s01_05_ (lmb5)    0.820    0.043   18.976    0.000
    s01_06_ (lmb6)    0.038    0.044    0.874    0.382
    s01_07_ (lmb7)    0.801    0.044   18.176    0.000
    s01_08_ (lmb8)    1.053    0.038   28.033    0.000
    s01_09_ (lmb9)    1.034    0.039   26.382    0.000
    s01_10_ (lm10)    0.934    0.040   23.116    0.000
    s01_11_ (lm11)   -0.760    0.039  -19.544    0.000
    s01_12_ (lm12)    0.841    0.043   19.695    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.157    0.045   70.268    0.000
   .sc01_02_1         3.378    0.047   71.322    0.000
   .sc01_03_1         3.232    0.046   69.556    0.000
   .sc01_04_1         3.139    0.047   67.116    0.000
   .sc01_05_1         2.974    0.046   64.411    0.000
   .sc01_06_1         2.889    0.042   69.113    0.000
   .sc01_07_1         2.700    0.047   57.795    0.000
   .sc01_08_1         2.753    0.045   61.854    0.000
   .sc01_09_1         2.856    0.046   62.701    0.000
   .sc01_10_1         2.926    0.045   64.757    0.000
   .sc01_11_1         3.243    0.042   77.576    0.000
   .sc01_12_1         3.115    0.046   67.710    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.829    0.045   18.572    0.000
   .sc01_02_t1        0.843    0.046   18.184    0.000
   .sc01_03_t1        0.896    0.048   18.622    0.000
   .sc01_04_t1        0.793    0.044   18.037    0.000
   .sc01_05_t1        1.134    0.058   19.475    0.000
   .sc01_06_t1        1.479    0.072   20.577    0.000
   .sc01_07_t1        1.208    0.062   19.612    0.000
   .sc01_08_t1        0.570    0.034   16.947    0.000
   .sc01_09_t1        0.688    0.039   17.655    0.000
   .sc01_10_t1        0.856    0.046   18.662    0.000
   .sc01_11_t1        0.903    0.047   19.403    0.000
   .sc01_12_t1        1.085    0.056   19.402    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 concept1 =~ sc01_08_t1 =~    lambda8    1.05      0.0375  0.812 
 2 concept1 =~ sc01_09_t1 =~    lambda9    1.03      0.0392  0.780 
 3 concept1 =~ sc01_04_t1 =~    lambda4    1.03      0.0408  0.756 
 4 concept1 =~ sc01_02_t1 =~    lambda2    1.03      0.0416  0.746 
 5 concept1 =~ sc01_03_t1 =~    lambda3    0.965     0.0415  0.714 
 6 concept1 =~ sc01_01_t1 =~    lambda1    0.939     0.0400  0.718 
 7 concept1 =~ sc01_10_t1 =~    lambda10   0.934     0.0404  0.710 
 8 concept1 =~ sc01_12_t1 =~    lambda12   0.841     0.0427  0.628 
 9 concept1 =~ sc01_05_t1 =~    lambda5    0.820     0.0432  0.610 
10 concept1 =~ sc01_07_t1 =~    lambda7    0.801     0.0440  0.589 
11 concept1 =~ sc01_11_t1 =~    lambda11  -0.760     0.0389 -0.624 
12 concept1 =~ sc01_06_t1 =~    lambda6    0.0381    0.0436  0.0313

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2,
         sc01_01_t3_r = sc01_01_t3,
         sc01_02_t3_r = sc01_02_t3,
         sc01_03_t3_r = sc01_03_t3,
         sc01_04_t3_r = sc01_04_t3,
         sc01_05_t3_r = sc01_05_t3,
         sc01_06_t3_r = sc01_06_t3,
         sc01_07_t3_r = sc01_07_t3,
         sc01_08_t3_r = sc01_08_t3,
         sc01_09_t3_r = sc01_09_t3,
         sc01_10_t3_r = sc01_10_t3,
         sc01_12_t3_r = sc01_12_t3) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_01_t1_r, sc01_05_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_03_t1_r, sc01_12_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_04_t1_r, sc01_02_t1_r, sc01_10_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_01_t2_r, sc01_05_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_03_t2_r, sc01_12_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_04_t2_r, sc01_02_t2_r, sc01_10_t2_r, sc01_07_t2_r)), na.rm=T),
         concept_par1_t3 = rowMeans(across(c(sc01_08_t3_r, sc01_01_t3_r, sc01_05_t3_r, sc01_06_t3_r)), na.rm=T),
         concept_par2_t3 = rowMeans(across(c(sc01_09_t3_r, sc01_03_t3_r, sc01_12_t3_r, sc01_11_t3)), na.rm=T),
         concept_par3_t3 = rowMeans(across(c(sc01_04_t3_r, sc01_02_t3_r, sc01_10_t3_r, sc01_07_t3_r)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate_all(~ifelse(is.nan(.), NA, .))

3.2 Big Five

Show the code
# all time points
df_sbsa2_wide_pers <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, starts_with(c("bf05", "bf06"))) %>% 
  mutate(valid=1) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(valid, starts_with(c("bf05", "bf06"))))
# colnames(df_sbsa2_wide_pers)

3.2.1 Extraversion - current self

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               847.969
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3167.484
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.744
  Tucker-Lewis Index (TLI)                       0.687
                                                      
  Robust Comparative Fit Index (CFI)             0.744
  Robust Tucker-Lewis Index (TLI)                0.687

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15300.920
  Loglikelihood unrestricted model (H1)     -14876.935
                                                      
  Akaike (AIC)                               30673.840
  Bayesian (BIC)                             30844.584
  Sample-size adjusted Bayesian (SABIC)      30730.259

Root Mean Square Error of Approximation:

  RMSEA                                          0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.079

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.945    0.042   22.295    0.000
    b05_06_ (lmb2)    0.540    0.042   12.805    0.000
    b05_11_ (lmb3)   -0.322    0.044   -7.334    0.000
    b05_16_ (lmb4)   -0.822    0.041  -19.905    0.000
    b05_21_ (lmb5)    0.770    0.043   18.089    0.000
    b05_26_ (lmb6)   -0.542    0.047  -11.619    0.000
    b05_31_ (lmb7)   -0.776    0.036  -21.343    0.000
    b05_36_ (lmb8)   -0.468    0.041  -11.547    0.000
    b05_41_ (lmb9)    0.676    0.041   16.507    0.000
    b05_46_ (lm10)    0.925    0.043   21.606    0.000
    b05_51_ (lm11)   -0.586    0.043  -13.508    0.000
    b05_56_ (lm12)    0.600    0.039   15.397    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.759    0.046   60.440    0.000
   .bf05_06_1         3.073    0.041   75.058    0.000
   .bf05_11_1         2.769    0.041   66.976    0.000
   .bf05_16_1         3.755    0.043   87.599    0.000
   .bf05_21_1         2.721    0.043   62.705    0.000
   .bf05_26_1         3.057    0.045   68.086    0.000
   .bf05_31_1         4.001    0.039  103.823    0.000
   .bf05_36_1         3.158    0.039   80.714    0.000
   .bf05_41_1         2.862    0.041   69.918    0.000
   .bf05_46_1         2.919    0.046   63.955    0.000
   .bf05_51_1         3.188    0.042   75.107    0.000
   .bf05_56_1         3.279    0.039   84.689    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.874    0.052   16.939    0.000
   .bf05_06_t1        1.130    0.058   19.592    0.000
   .bf05_11_t1        1.343    0.066   20.296    0.000
   .bf05_16_t1        0.881    0.050   17.454    0.000
   .bf05_21_t1        1.003    0.055   18.195    0.000
   .bf05_26_t1        1.415    0.072   19.774    0.000
   .bf05_31_t1        0.656    0.038   17.105    0.000
   .bf05_36_t1        1.079    0.054   19.840    0.000
   .bf05_41_t1        0.961    0.052   18.580    0.000
   .bf05_46_t1        0.909    0.053   17.105    0.000
   .bf05_51_t1        1.184    0.061   19.467    0.000
   .bf05_56_t1        0.910    0.048   19.012    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_curr1 =~ bf05_01_t1 =~    lambda1     0.945    0.0424   0.711
 2 extra_curr1 =~ bf05_46_t1 =~    lambda10    0.925    0.0428   0.696
 3 extra_curr1 =~ bf05_16_t1 =~    lambda4    -0.822    0.0413  -0.659
 4 extra_curr1 =~ bf05_31_t1 =~    lambda7    -0.776    0.0364  -0.692
 5 extra_curr1 =~ bf05_21_t1 =~    lambda5     0.770    0.0426   0.610
 6 extra_curr1 =~ bf05_41_t1 =~    lambda9     0.676    0.0410   0.568
 7 extra_curr1 =~ bf05_56_t1 =~    lambda12    0.600    0.0389   0.532
 8 extra_curr1 =~ bf05_51_t1 =~    lambda11   -0.586    0.0434  -0.474
 9 extra_curr1 =~ bf05_26_t1 =~    lambda6    -0.542    0.0467  -0.415
10 extra_curr1 =~ bf05_06_t1 =~    lambda2     0.540    0.0421   0.453
11 extra_curr1 =~ bf05_36_t1 =~    lambda8    -0.468    0.0405  -0.411
12 extra_curr1 =~ bf05_11_t1 =~    lambda3    -0.322    0.0438  -0.267

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2,
         bf05_31_t3_r = bf05_31_t3,
         bf05_16_t3_r = bf05_16_t3,
         bf05_26_t3_r = bf05_26_t3,
         bf05_51_t3_r = bf05_51_t3,
         bf05_36_t3_r = bf05_36_t3,
         bf05_11_t3_r = bf05_11_t3) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r, 
                  bf05_31_t3_r, bf05_16_t3_r, bf05_26_t3_r, bf05_51_t3_r, bf05_36_t3_r, bf05_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_41_t1, bf05_26_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_21_t1, bf05_51_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_16_t1_r, bf05_31_t1_r, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_41_t2, bf05_26_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_21_t2, bf05_51_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_16_t2_r, bf05_31_t2_r, bf05_56_t2, bf05_06_t2)), na.rm=T),
         extra_curr_par1_t3 = rowMeans(across(c(bf05_01_t3, bf05_41_t3, bf05_26_t3_r, bf05_11_t3_r)), na.rm=T),
         extra_curr_par2_t3 = rowMeans(across(c(bf05_46_t3, bf05_21_t3, bf05_51_t3_r, bf05_36_t3_r)), na.rm=T),
         extra_curr_par3_t3 = rowMeans(across(c(bf05_16_t3_r, bf05_31_t3_r, bf05_56_t3, bf05_06_t3)), na.rm=T))

3.2.2 Extraversion - ideal self

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         6            

Model Test User Model:
                                                      
  Test statistic                               254.727
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1146.934
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.814
  Tucker-Lewis Index (TLI)                       0.773
                                                      
  Robust Comparative Fit Index (CFI)             0.816
  Robust Tucker-Lewis Index (TLI)                0.775

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14072.893
  Loglikelihood unrestricted model (H1)     -13945.529
                                                      
  Akaike (AIC)                               28217.786
  Bayesian (BIC)                             28388.529
  Sample-size adjusted Bayesian (SABIC)      28274.204

Root Mean Square Error of Approximation:

  RMSEA                                          0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.003
                                                      
  Robust RMSEA                                   0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: Robust RMSEA <= 0.050             0.001
  P-value H_0: Robust RMSEA >= 0.080             0.003

Standardized Root Mean Square Residual:

  SRMR                                           0.049

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.409    0.034   12.191    0.000
    b06_06_ (lmb2)    0.250    0.036    6.881    0.000
    b06_11_ (lmb3)   -0.307    0.054   -5.691    0.000
    b06_16_ (lmb4)   -0.423    0.049   -8.670    0.000
    b06_21_ (lmb5)    0.478    0.042   11.421    0.000
    b06_26_ (lmb6)   -0.430    0.039  -10.915    0.000
    b06_31_ (lmb7)   -0.491    0.042  -11.702    0.000
    b06_36_ (lmb8)   -0.411    0.044   -9.303    0.000
    b06_41_ (lmb9)    0.383    0.029   13.350    0.000
    b06_46_ (lm10)    0.390    0.040    9.738    0.000
    b06_51_ (lm11)   -0.485    0.042  -11.413    0.000
    b06_56_ (lm12)    0.466    0.033   14.281    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.237    0.030  142.383    0.000
   .bf06_06_1         4.128    0.031  132.290    0.000
   .bf06_11_1         2.257    0.046   48.598    0.000
   .bf06_16_1         2.857    0.042   68.327    0.000
   .bf06_21_1         3.803    0.037  102.781    0.000
   .bf06_26_1         1.722    0.035   49.589    0.000
   .bf06_31_1         2.184    0.037   59.386    0.000
   .bf06_36_1         2.201    0.038   57.183    0.000
   .bf06_41_1         4.471    0.025  176.151    0.000
   .bf06_46_1         3.713    0.035  105.946    0.000
   .bf06_51_1         2.392    0.037   64.098    0.000
   .bf06_56_1         4.265    0.029  146.413    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.580    0.032   18.206    0.000
   .bf06_06_t1        0.760    0.038   19.886    0.000
   .bf06_11_t1        1.733    0.086   20.146    0.000
   .bf06_16_t1        1.301    0.067   19.369    0.000
   .bf06_21_t1        0.930    0.050   18.530    0.000
   .bf06_26_t1        0.834    0.044   18.786    0.000
   .bf06_31_t1        0.901    0.049   18.265    0.000
   .bf06_36_t1        1.083    0.056   19.300    0.000
   .bf06_41_t1        0.399    0.023   17.422    0.000
   .bf06_46_t1        0.887    0.046   19.161    0.000
   .bf06_51_t1        0.942    0.051   18.479    0.000
   .bf06_56_t1        0.502    0.030   16.791    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_ideal1 =~ bf06_31_t1 =~    lambda7    -0.491    0.0419  -0.459
 2 extra_ideal1 =~ bf06_51_t1 =~    lambda11   -0.485    0.0425  -0.447
 3 extra_ideal1 =~ bf06_21_t1 =~    lambda5     0.478    0.0418   0.444
 4 extra_ideal1 =~ bf06_56_t1 =~    lambda12    0.466    0.0326   0.549
 5 extra_ideal1 =~ bf06_26_t1 =~    lambda6    -0.430    0.0394  -0.426
 6 extra_ideal1 =~ bf06_16_t1 =~    lambda4    -0.423    0.0488  -0.348
 7 extra_ideal1 =~ bf06_36_t1 =~    lambda8    -0.411    0.0442  -0.367
 8 extra_ideal1 =~ bf06_01_t1 =~    lambda1     0.409    0.0336   0.473
 9 extra_ideal1 =~ bf06_46_t1 =~    lambda10    0.390    0.0400   0.382
10 extra_ideal1 =~ bf06_41_t1 =~    lambda9     0.383    0.0287   0.518
11 extra_ideal1 =~ bf06_11_t1 =~    lambda3    -0.307    0.0540  -0.227
12 extra_ideal1 =~ bf06_06_t1 =~    lambda2     0.250    0.0364   0.276

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2,
         bf06_31_t3_r = bf06_31_t3,
         bf06_16_t3_r = bf06_16_t3,
         bf06_26_t3_r = bf06_26_t3,
         bf06_51_t3_r = bf06_51_t3,
         bf06_36_t3_r = bf06_36_t3,
         bf06_11_t3_r = bf06_11_t3) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r, 
                  bf06_31_t3_r, bf06_16_t3_r, bf06_26_t3_r, bf06_51_t3_r, bf06_36_t3_r, bf06_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_46_t1, bf06_06_t1)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_21_t1, bf06_26_t1_r, bf06_01_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_51_t1_r, bf06_56_t1, bf06_36_t1_r, bf06_41_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_16_t2_r, bf06_46_t2, bf06_06_t2)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_21_t2, bf06_26_t2_r, bf06_01_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_51_t2_r, bf06_56_t2, bf06_36_t2_r, bf06_41_t2)), na.rm=T),
         extra_ideal_par1_t3 = rowMeans(across(c(bf06_31_t3_r, bf06_16_t3_r, bf06_46_t3, bf06_06_t3)), na.rm=T),
         extra_ideal_par2_t3 = rowMeans(across(c(bf06_21_t3, bf06_26_t3_r, bf06_01_t3, bf06_11_t3_r)), na.rm=T),
         extra_ideal_par3_t3 = rowMeans(across(c(bf06_51_t3_r, bf06_56_t3, bf06_36_t3_r, bf06_41_t3)), na.rm=T))

3.2.3 Agreeableness - current self

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               532.762
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2295.706
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.785
  Tucker-Lewis Index (TLI)                       0.738
                                                      
  Robust Comparative Fit Index (CFI)             0.785
  Robust Tucker-Lewis Index (TLI)                0.737

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14316.892
  Loglikelihood unrestricted model (H1)     -14050.512
                                                      
  Akaike (AIC)                               28705.785
  Bayesian (BIC)                             28876.529
  Sample-size adjusted Bayesian (SABIC)      28762.203

Root Mean Square Error of Approximation:

  RMSEA                                          0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.065

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.483    0.031   15.345    0.000
    b05_07_ (lmb2)    0.430    0.025   17.189    0.000
    b05_12_ (lmb3)   -0.606    0.044  -13.801    0.000
    b05_17_ (lmb4)   -0.182    0.055   -3.291    0.001
    b05_22_ (lmb5)   -0.643    0.043  -15.116    0.000
    b05_27_ (lmb6)    0.595    0.042   14.270    0.000
    b05_32_ (lmb7)    0.529    0.032   16.781    0.000
    b05_37_ (lmb8)   -0.741    0.044  -17.020    0.000
    b05_42_ (lmb9)   -0.419    0.045   -9.406    0.000
    b05_47_ (lm10)   -0.789    0.044  -17.761    0.000
    b05_52_ (lm11)    0.418    0.025   16.841    0.000
    b05_57_ (lm12)    0.558    0.043   12.968    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.188    0.031  136.262    0.000
   .bf05_07_1         4.449    0.025  179.500    0.000
   .bf05_12_1         2.877    0.042   68.327    0.000
   .bf05_17_1         2.667    0.050   52.975    0.000
   .bf05_22_1         2.172    0.041   52.346    0.000
   .bf05_27_1         3.598    0.040   89.031    0.000
   .bf05_32_1         3.963    0.031  126.684    0.000
   .bf05_37_1         2.486    0.043   57.567    0.000
   .bf05_42_1         3.590    0.041   87.538    0.000
   .bf05_47_1         2.526    0.045   56.750    0.000
   .bf05_52_1         4.300    0.025  175.434    0.000
   .bf05_57_1         3.201    0.041   78.189    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.567    0.031   18.581    0.000
   .bf05_07_t1        0.336    0.019   17.849    0.000
   .bf05_12_t1        1.137    0.060   18.981    0.000
   .bf05_17_t1        2.113    0.103   20.507    0.000
   .bf05_22_t1        1.045    0.056   18.699    0.000
   .bf05_27_t1        1.029    0.054   18.970    0.000
   .bf05_32_t1        0.550    0.030   18.167    0.000
   .bf05_37_t1        1.031    0.057   17.986    0.000
   .bf05_42_t1        1.250    0.063   19.829    0.000
   .bf05_47_t1        1.056    0.059   17.798    0.000
   .bf05_52_t1        0.335    0.019   17.988    0.000
   .bf05_57_t1        1.109    0.058   19.161    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_curr1 =~ bf05_47_t1 =~    lambda10   -0.789    0.0444  -0.609
 2 agree_curr1 =~ bf05_37_t1 =~    lambda8    -0.741    0.0435  -0.589
 3 agree_curr1 =~ bf05_22_t1 =~    lambda5    -0.643    0.0425  -0.532
 4 agree_curr1 =~ bf05_12_t1 =~    lambda3    -0.606    0.0439  -0.494
 5 agree_curr1 =~ bf05_27_t1 =~    lambda6     0.595    0.0417   0.506
 6 agree_curr1 =~ bf05_57_t1 =~    lambda12    0.558    0.0430   0.468
 7 agree_curr1 =~ bf05_32_t1 =~    lambda7     0.529    0.0315   0.581
 8 agree_curr1 =~ bf05_02_t1 =~    lambda1     0.483    0.0315   0.540
 9 agree_curr1 =~ bf05_07_t1 =~    lambda2     0.430    0.0250   0.595
10 agree_curr1 =~ bf05_42_t1 =~    lambda9    -0.419    0.0446  -0.351
11 agree_curr1 =~ bf05_52_t1 =~    lambda11    0.418    0.0248   0.585
12 agree_curr1 =~ bf05_17_t1 =~    lambda4    -0.182    0.0554  -0.124

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2,
         bf05_47_t3_r = bf05_47_t3,
         bf05_37_t3_r = bf05_37_t3,
         bf05_22_t3_r = bf05_22_t3,
         bf05_12_t3_r = bf05_12_t3,
         bf05_42_t3_r = bf05_42_t3,
         bf05_17_t3_r = bf05_17_t3) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r, 
                  bf05_47_t3_r, bf05_37_t3_r, bf05_22_t3_r, bf05_12_t3_r, bf05_42_t3_r, bf05_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_57_t1, bf05_07_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_27_t1, bf05_02_t1, bf05_52_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_57_t2, bf05_07_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_27_t2, bf05_02_t2, bf05_52_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par1_t3 = rowMeans(across(c(bf05_47_t3_r, bf05_57_t3, bf05_07_t3, bf05_17_t3)), na.rm=T),
         agree_curr_par2_t3 = rowMeans(across(c(bf05_37_t3_r, bf05_27_t3, bf05_02_t3, bf05_52_t3)), na.rm=T),
         agree_curr_par3_t3 = rowMeans(across(c(bf05_22_t3_r, bf05_12_t3_r, bf05_32_t3, bf05_42_t3)), na.rm=T))

3.2.4 Agreeableness - ideal self

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               233.018
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2098.126
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.912
  Tucker-Lewis Index (TLI)                       0.892
                                                      
  Robust Comparative Fit Index (CFI)             0.912
  Robust Tucker-Lewis Index (TLI)                0.892

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13331.073
  Loglikelihood unrestricted model (H1)     -13214.564
                                                      
  Akaike (AIC)                               26734.147
  Bayesian (BIC)                             26904.848
  Sample-size adjusted Bayesian (SABIC)      26790.523

Root Mean Square Error of Approximation:

  RMSEA                                          0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.071
  P-value H_0: RMSEA <= 0.050                    0.006
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.063
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.071
  P-value H_0: Robust RMSEA <= 0.050             0.006
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.041

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.528    0.032   16.391    0.000
    b06_07_ (lmb2)    0.365    0.023   15.818    0.000
    b06_12_ (lmb3)   -0.515    0.035  -14.679    0.000
    b06_17_ (lmb4)   -0.143    0.059   -2.413    0.016
    b06_22_ (lmb5)   -0.492    0.037  -13.306    0.000
    b06_27_ (lmb6)    0.612    0.037   16.352    0.000
    b06_32_ (lmb7)    0.509    0.032   15.871    0.000
    b06_37_ (lmb8)   -0.511    0.029  -17.449    0.000
    b06_42_ (lmb9)   -0.462    0.044  -10.587    0.000
    b06_47_ (lm10)   -0.716    0.037  -19.412    0.000
    b06_52_ (lm11)    0.452    0.024   18.543    0.000
    b06_57_ (lm12)    0.496    0.037   13.514    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.269    0.032  133.231    0.000
   .bf06_07_1         4.650    0.023  204.363    0.000
   .bf06_12_1         1.913    0.034   55.740    0.000
   .bf06_17_1         2.585    0.054   47.665    0.000
   .bf06_22_1         1.789    0.036   49.972    0.000
   .bf06_27_1         3.911    0.037  104.943    0.000
   .bf06_32_1         4.304    0.032  135.497    0.000
   .bf06_37_1         1.633    0.029   55.361    0.000
   .bf06_42_1         2.758    0.041   66.971    0.000
   .bf06_47_1         1.861    0.038   49.122    0.000
   .bf06_52_1         4.540    0.025  183.437    0.000
   .bf06_57_1         3.787    0.036  106.585    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.590    0.032   18.476    0.000
   .bf06_07_t1        0.305    0.016   18.590    0.000
   .bf06_12_t1        0.731    0.039   18.964    0.000
   .bf06_17_t1        2.468    0.120   20.531    0.000
   .bf06_22_t1        0.842    0.044   19.317    0.000
   .bf06_27_t1        0.801    0.043   18.535    0.000
   .bf06_32_t1        0.593    0.032   18.663    0.000
   .bf06_37_t1        0.474    0.026   18.155    0.000
   .bf06_42_t1        1.220    0.062   19.775    0.000
   .bf06_47_t1        0.701    0.040   17.349    0.000
   .bf06_52_t1        0.314    0.018   17.648    0.000
   .bf06_57_t1        0.822    0.043   19.256    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_ideal1 =~ bf06_47_t1 =~    lambda10   -0.716    0.0369 -0.650 
 2 agree_ideal1 =~ bf06_27_t1 =~    lambda6     0.612    0.0374  0.565 
 3 agree_ideal1 =~ bf06_02_t1 =~    lambda1     0.528    0.0322  0.567 
 4 agree_ideal1 =~ bf06_12_t1 =~    lambda3    -0.515    0.0351 -0.516 
 5 agree_ideal1 =~ bf06_37_t1 =~    lambda8    -0.511    0.0293 -0.596 
 6 agree_ideal1 =~ bf06_32_t1 =~    lambda7     0.509    0.0321  0.551 
 7 agree_ideal1 =~ bf06_57_t1 =~    lambda12    0.496    0.0367  0.480 
 8 agree_ideal1 =~ bf06_22_t1 =~    lambda5    -0.492    0.0370 -0.473 
 9 agree_ideal1 =~ bf06_42_t1 =~    lambda9    -0.462    0.0436 -0.386 
10 agree_ideal1 =~ bf06_52_t1 =~    lambda11    0.452    0.0244  0.628 
11 agree_ideal1 =~ bf06_07_t1 =~    lambda2     0.365    0.0230  0.551 
12 agree_ideal1 =~ bf06_17_t1 =~    lambda4    -0.143    0.0594 -0.0909

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2,
         bf06_47_t3_r = bf06_47_t3,
         bf06_37_t3_r = bf06_37_t3,
         bf06_22_t3_r = bf06_22_t3,
         bf06_12_t3_r = bf06_12_t3,
         bf06_42_t3_r = bf06_42_t3,
         bf06_17_t3_r = bf06_17_t3) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r, 
                  bf06_47_t3_r, bf06_37_t3_r, bf06_22_t3_r, bf06_12_t3_r, bf06_42_t3_r, bf06_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_42_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_37_t1_r, bf06_22_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_02_t1, bf06_12_t1_r, bf06_57_t1, bf06_52_t1)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_42_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_37_t2_r, bf06_22_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_02_t2, bf06_12_t2_r, bf06_57_t2, bf06_52_t2)), na.rm=T),
         agree_ideal_par1_t3 = rowMeans(across(c(bf06_47_t3_r, bf06_32_t3, bf06_42_t3_r, bf06_17_t3_r)), na.rm=T),
         agree_ideal_par2_t3 = rowMeans(across(c(bf06_27_t3, bf06_37_t3_r, bf06_22_t3_r, bf06_07_t3)), na.rm=T),
         agree_ideal_par3_t3 = rowMeans(across(c(bf06_02_t3, bf06_12_t3_r, bf06_57_t3, bf06_52_t3)), na.rm=T))

3.2.5 Conscientiousness - current self

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               801.533
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3586.088
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.788
  Tucker-Lewis Index (TLI)                       0.740
                                                      
  Robust Comparative Fit Index (CFI)             0.788
  Robust Tucker-Lewis Index (TLI)                0.740

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14696.583
  Loglikelihood unrestricted model (H1)     -14295.816
                                                      
  Akaike (AIC)                               29465.166
  Bayesian (BIC)                             29635.910
  Sample-size adjusted Bayesian (SABIC)      29521.584

Root Mean Square Error of Approximation:

  RMSEA                                          0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.073

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.014    0.044   23.242    0.000
    b05_08_ (lmb2)    0.808    0.042   19.245    0.000
    b05_13_ (lmb3)   -0.380    0.039   -9.805    0.000
    b05_18_ (lmb4)   -0.733    0.037  -19.560    0.000
    b05_23_ (lmb5)    0.801    0.043   18.440    0.000
    b05_28_ (lmb6)    0.720    0.043   16.786    0.000
    b05_33_ (lmb7)   -0.793    0.037  -21.311    0.000
    b05_38_ (lmb8)   -0.637    0.033  -19.029    0.000
    b05_43_ (lmb9)   -0.470    0.034  -13.894    0.000
    b05_48_ (lm10)    0.719    0.039   18.599    0.000
    b05_53_ (lm11)   -0.634    0.037  -17.019    0.000
    b05_58_ (lm12)    0.684    0.044   15.680    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.894    0.048   60.442    0.000
   .bf05_08_1         3.440    0.044   78.102    0.000
   .bf05_13_1         3.625    0.037   97.459    0.000
   .bf05_18_1         3.576    0.039   90.816    0.000
   .bf05_23_1         3.366    0.045   74.573    0.000
   .bf05_28_1         2.879    0.044   65.754    0.000
   .bf05_33_1         3.409    0.040   85.611    0.000
   .bf05_38_1         3.703    0.035  106.023    0.000
   .bf05_43_1         3.986    0.033  119.068    0.000
   .bf05_48_1         2.094    0.040   52.070    0.000
   .bf05_53_1         3.775    0.038   99.069    0.000
   .bf05_58_1         2.769    0.044   62.917    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.915    0.054   17.080    0.000
   .bf05_08_t1        0.992    0.054   18.527    0.000
   .bf05_13_t1        1.028    0.051   20.118    0.000
   .bf05_18_t1        0.776    0.042   18.328    0.000
   .bf05_23_t1        1.085    0.058   18.700    0.000
   .bf05_28_t1        1.105    0.058   19.059    0.000
   .bf05_33_t1        0.714    0.040   17.661    0.000
   .bf05_38_t1        0.629    0.034   18.474    0.000
   .bf05_43_t1        0.729    0.037   19.538    0.000
   .bf05_48_t1        0.854    0.046   18.661    0.000
   .bf05_53_t1        0.829    0.044   19.001    0.000
   .bf05_58_t1        1.174    0.061   19.285    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_curr1 =~ bf05_03_t1 =~    lambda1     1.01     0.0436   0.727
 2 consc_curr1 =~ bf05_08_t1 =~    lambda2     0.808    0.0420   0.630
 3 consc_curr1 =~ bf05_23_t1 =~    lambda5     0.801    0.0435   0.610
 4 consc_curr1 =~ bf05_33_t1 =~    lambda7    -0.793    0.0372  -0.684
 5 consc_curr1 =~ bf05_18_t1 =~    lambda4    -0.733    0.0375  -0.640
 6 consc_curr1 =~ bf05_28_t1 =~    lambda6     0.720    0.0429   0.565
 7 consc_curr1 =~ bf05_48_t1 =~    lambda10    0.719    0.0386   0.614
 8 consc_curr1 =~ bf05_58_t1 =~    lambda12    0.684    0.0436   0.534
 9 consc_curr1 =~ bf05_38_t1 =~    lambda8    -0.637    0.0335  -0.626
10 consc_curr1 =~ bf05_53_t1 =~    lambda11   -0.634    0.0373  -0.572
11 consc_curr1 =~ bf05_43_t1 =~    lambda9    -0.470    0.0339  -0.483
12 consc_curr1 =~ bf05_13_t1 =~    lambda3    -0.380    0.0387  -0.351

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2,
         bf05_03_t3_r = bf05_03_t3,
         bf05_23_t3_r = bf05_23_t3,
         bf05_48_t3_r = bf05_48_t3,
         bf05_08_t3_r = bf05_08_t3,
         bf05_28_t3_r = bf05_28_t3,
         bf05_58_t3_r = bf05_58_t3) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r,
                  bf05_03_t3_r, bf05_23_t3_r, bf05_48_t3_r, bf05_08_t3_r, bf05_28_t3_r, bf05_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_28_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_08_t1_r, bf05_18_t1, bf05_58_t1_r, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_23_t1_r, bf05_33_t1, bf05_48_t1_r, bf05_53_t1)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_28_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_08_t2_r, bf05_18_t2, bf05_58_t2_r, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_23_t2_r, bf05_33_t2, bf05_48_t2_r, bf05_53_t2)), na.rm=T),
         consc_curr_par1_t3 = rowMeans(across(c(bf05_03_t3_r, bf05_28_t3_r, bf05_38_t3, bf05_13_t3)), na.rm=T),
         consc_curr_par2_t3 = rowMeans(across(c(bf05_08_t3_r, bf05_18_t3, bf05_58_t3_r, bf05_43_t3)), na.rm=T),
         consc_curr_par3_t3 = rowMeans(across(c(bf05_23_t3_r, bf05_33_t3, bf05_48_t3_r, bf05_53_t3)), na.rm=T))

3.2.6 Conscientiousness - ideal self

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               261.132
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2186.521
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.902
  Tucker-Lewis Index (TLI)                       0.881
                                                      
  Robust Comparative Fit Index (CFI)             0.902
  Robust Tucker-Lewis Index (TLI)                0.880

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11827.022
  Loglikelihood unrestricted model (H1)     -11696.456
                                                      
  Akaike (AIC)                               23726.045
  Bayesian (BIC)                             23896.788
  Sample-size adjusted Bayesian (SABIC)      23782.463

Root Mean Square Error of Approximation:

  RMSEA                                          0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.005
                                                      
  Robust RMSEA                                   0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.006

Standardized Root Mean Square Residual:

  SRMR                                           0.044

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.441    0.042   10.435    0.000
    b06_08_ (lmb2)    0.412    0.032   12.845    0.000
    b06_13_ (lmb3)   -0.368    0.042   -8.845    0.000
    b06_18_ (lmb4)   -0.417    0.028  -14.929    0.000
    b06_23_ (lmb5)    0.451    0.029   15.561    0.000
    b06_28_ (lmb6)    0.577    0.035   16.264    0.000
    b06_33_ (lmb7)   -0.403    0.026  -15.487    0.000
    b06_38_ (lmb8)   -0.445    0.023  -19.306    0.000
    b06_43_ (lmb9)   -0.419    0.025  -16.913    0.000
    b06_48_ (lm10)    0.419    0.027   15.427    0.000
    b06_53_ (lm11)   -0.433    0.021  -20.174    0.000
    b06_58_ (lm12)    0.494    0.034   14.373    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.718    0.040   42.978    0.000
   .bf06_08_1         1.606    0.031   51.992    0.000
   .bf06_13_1         4.196    0.039  107.674    0.000
   .bf06_18_1         4.352    0.027  158.625    0.000
   .bf06_23_1         1.488    0.029   51.993    0.000
   .bf06_28_1         1.857    0.035   52.569    0.000
   .bf06_33_1         4.460    0.026  173.589    0.000
   .bf06_38_1         4.642    0.024  195.735    0.000
   .bf06_43_1         4.565    0.025  183.655    0.000
   .bf06_48_1         1.378    0.027   51.299    0.000
   .bf06_53_1         4.632    0.022  207.973    0.000
   .bf06_58_1         1.775    0.034   52.825    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.157    0.058   19.844    0.000
   .bf06_08_t1        0.637    0.033   19.365    0.000
   .bf06_13_t1        1.151    0.057   20.076    0.000
   .bf06_18_t1        0.463    0.024   18.963    0.000
   .bf06_23_t1        0.489    0.026   18.752    0.000
   .bf06_28_t1        0.723    0.039   18.580    0.000
   .bf06_33_t1        0.396    0.021   18.785    0.000
   .bf06_38_t1        0.278    0.016   17.526    0.000
   .bf06_43_t1        0.347    0.019   18.385    0.000
   .bf06_48_t1        0.435    0.023   18.877    0.000
   .bf06_53_t1        0.232    0.014   17.105    0.000
   .bf06_58_t1        0.711    0.037   19.097    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_ideal1 =~ bf06_28_t1 =~    lambda6     0.577    0.0355   0.562
 2 consc_ideal1 =~ bf06_58_t1 =~    lambda12    0.494    0.0344   0.505
 3 consc_ideal1 =~ bf06_23_t1 =~    lambda5     0.451    0.0290   0.542
 4 consc_ideal1 =~ bf06_38_t1 =~    lambda8    -0.445    0.0231  -0.645
 5 consc_ideal1 =~ bf06_03_t1 =~    lambda1     0.441    0.0422   0.379
 6 consc_ideal1 =~ bf06_53_t1 =~    lambda11   -0.433    0.0215  -0.668
 7 consc_ideal1 =~ bf06_43_t1 =~    lambda9    -0.419    0.0248  -0.580
 8 consc_ideal1 =~ bf06_48_t1 =~    lambda10    0.419    0.0272   0.536
 9 consc_ideal1 =~ bf06_18_t1 =~    lambda4    -0.417    0.0279  -0.522
10 consc_ideal1 =~ bf06_08_t1 =~    lambda2     0.412    0.0321   0.459
11 consc_ideal1 =~ bf06_33_t1 =~    lambda7    -0.403    0.0260  -0.539
12 consc_ideal1 =~ bf06_13_t1 =~    lambda3    -0.368    0.0416  -0.324

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2,
         bf06_03_t3_r = bf06_03_t3,
         bf06_23_t3_r = bf06_23_t3,
         bf06_48_t3_r = bf06_48_t3,
         bf06_08_t3_r = bf06_08_t3,
         bf06_28_t3_r = bf06_28_t3,
         bf06_58_t3_r = bf06_58_t3) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r,
                  bf06_03_t3_r, bf06_23_t3_r, bf06_48_t3_r, bf06_08_t3_r, bf06_28_t3_r, bf06_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_53_t1, bf06_18_t1, bf06_13_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_58_t1_r, bf06_03_t1_r, bf06_48_t1_r, bf06_33_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_38_t1, bf06_43_t1, bf06_08_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_53_t2, bf06_18_t2, bf06_13_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_58_t2_r, bf06_03_t2_r, bf06_48_t2_r, bf06_33_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_38_t2, bf06_43_t2, bf06_08_t2_r)), na.rm=T),
         consc_ideal_par1_t3 = rowMeans(across(c(bf06_28_t3_r, bf06_53_t3, bf06_18_t3, bf06_13_t3)), na.rm=T),
         consc_ideal_par2_t3 = rowMeans(across(c(bf06_58_t3_r, bf06_03_t3_r, bf06_48_t3_r, bf06_33_t3)), na.rm=T),
         consc_ideal_par3_t3 = rowMeans(across(c(bf06_23_t3_r, bf06_38_t3, bf06_43_t3, bf06_08_t3_r)), na.rm=T))

3.2.7 Neuroticism - current self

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  611
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 35 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               680.474
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4495.728
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.859
  Tucker-Lewis Index (TLI)                       0.827
                                                      
  Robust Comparative Fit Index (CFI)             0.858
  Robust Tucker-Lewis Index (TLI)                0.827

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14759.163
  Loglikelihood unrestricted model (H1)     -14418.926
                                                      
  Akaike (AIC)                               29590.325
  Bayesian (BIC)                             29761.069
  Sample-size adjusted Bayesian (SABIC)      29646.744

Root Mean Square Error of Approximation:

  RMSEA                                          0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.055

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.904    0.041   22.165    0.000
    b05_09_ (lmb2)    0.758    0.039   19.533    0.000
    b05_14_ (lmb3)   -0.901    0.042  -21.239    0.000
    b05_19_ (lmb4)   -0.624    0.035  -17.726    0.000
    b05_24_ (lmb5)    0.755    0.040   18.667    0.000
    b05_29_ (lmb6)    0.906    0.038   23.588    0.000
    b05_34_ (lmb7)   -0.806    0.037  -22.003    0.000
    b05_39_ (lmb8)   -0.921    0.040  -23.031    0.000
    b05_44_ (lmb9)    0.806    0.039   20.762    0.000
    b05_49_ (lm10)    0.623    0.041   15.315    0.000
    b05_54_ (lm11)   -0.996    0.043  -23.246    0.000
    b05_59_ (lm12)   -0.814    0.042  -19.249    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.755    0.045   61.511    0.000
   .bf05_09_1         2.933    0.041   70.774    0.000
   .bf05_14_1         3.152    0.046   68.350    0.000
   .bf05_19_1         3.588    0.037   97.236    0.000
   .bf05_24_1         3.017    0.043   70.486    0.000
   .bf05_29_1         2.977    0.043   69.428    0.000
   .bf05_34_1         3.879    0.040   96.548    0.000
   .bf05_39_1         3.303    0.044   74.777    0.000
   .bf05_44_1         3.210    0.042   76.710    0.000
   .bf05_49_1         2.342    0.042   56.155    0.000
   .bf05_54_1         3.249    0.047   68.523    0.000
   .bf05_59_1         3.128    0.045   69.737    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.882    0.048   18.423    0.000
   .bf05_09_t1        0.880    0.046   19.093    0.000
   .bf05_14_t1        0.992    0.053   18.707    0.000
   .bf05_19_t1        0.765    0.039   19.447    0.000
   .bf05_24_t1        0.982    0.051   19.257    0.000
   .bf05_29_t1        0.736    0.041   17.947    0.000
   .bf05_34_t1        0.719    0.039   18.497    0.000
   .bf05_39_t1        0.806    0.045   17.863    0.000
   .bf05_44_t1        0.834    0.045   18.629    0.000
   .bf05_49_t1        1.084    0.055   19.757    0.000
   .bf05_54_t1        0.915    0.052   17.759    0.000
   .bf05_59_t1        1.042    0.055   18.985    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_curr1 =~ bf05_54_t1 =~    lambda11   -0.996    0.0428  -0.721
 2 neuro_curr1 =~ bf05_39_t1 =~    lambda8    -0.921    0.0400  -0.716
 3 neuro_curr1 =~ bf05_29_t1 =~    lambda6     0.906    0.0384   0.726
 4 neuro_curr1 =~ bf05_04_t1 =~    lambda1     0.904    0.0408   0.693
 5 neuro_curr1 =~ bf05_14_t1 =~    lambda3    -0.901    0.0424  -0.671
 6 neuro_curr1 =~ bf05_59_t1 =~    lambda12   -0.814    0.0423  -0.624
 7 neuro_curr1 =~ bf05_34_t1 =~    lambda7    -0.806    0.0366  -0.689
 8 neuro_curr1 =~ bf05_44_t1 =~    lambda9     0.806    0.0388   0.662
 9 neuro_curr1 =~ bf05_09_t1 =~    lambda2     0.758    0.0388   0.628
10 neuro_curr1 =~ bf05_24_t1 =~    lambda5     0.755    0.0405   0.606
11 neuro_curr1 =~ bf05_19_t1 =~    lambda4    -0.624    0.0352  -0.581
12 neuro_curr1 =~ bf05_49_t1 =~    lambda10    0.623    0.0407   0.514

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2,
         bf05_29_t3_r = bf05_29_t3,
         bf05_04_t3_r = bf05_04_t3,
         bf05_24_t3_r = bf05_24_t3,
         bf05_44_t3_r = bf05_44_t3,
         bf05_09_t3_r = bf05_09_t3,
         bf05_49_t3_r = bf05_49_t3) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r, 
                  bf05_29_t3_r, bf05_04_t3_r, bf05_24_t3_r, bf05_44_t3_r, bf05_09_t3_r, bf05_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_59_t1, bf05_09_t1_r, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_39_t1, bf05_14_t1, bf05_44_t1_r, bf05_19_t1)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_34_t1, bf05_24_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_59_t2, bf05_09_t2_r, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_39_t2, bf05_14_t2, bf05_44_t2_r, bf05_19_t2)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_04_t2_r, bf05_34_t2, bf05_24_t2_r)), na.rm=T),
         neuro_curr_par1_t3 = rowMeans(across(c(bf05_54_t3, bf05_59_t3, bf05_09_t3_r, bf05_49_t3_r)), na.rm=T),
         neuro_curr_par2_t3 = rowMeans(across(c(bf05_39_t3, bf05_14_t3, bf05_44_t3_r, bf05_19_t3)), na.rm=T),
         neuro_curr_par3_t3 = rowMeans(across(c(bf05_29_t3_r, bf05_04_t3_r, bf05_34_t3, bf05_24_t3_r)), na.rm=T))

3.2.8 Neuroticism - ideal self

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               273.694
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2229.774
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.898
  Tucker-Lewis Index (TLI)                       0.876
                                                      
  Robust Comparative Fit Index (CFI)             0.898
  Robust Tucker-Lewis Index (TLI)                0.876

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12149.997
  Loglikelihood unrestricted model (H1)     -12013.150
                                                      
  Akaike (AIC)                               24371.994
  Bayesian (BIC)                             24542.738
  Sample-size adjusted Bayesian (SABIC)      24428.413

Root Mean Square Error of Approximation:

  RMSEA                                          0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.016
                                                      
  Robust RMSEA                                   0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.017

Standardized Root Mean Square Residual:

  SRMR                                           0.042

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.311    0.027   11.743    0.000
    b06_09_ (lmb2)    0.430    0.026   16.554    0.000
    b06_14_ (lmb3)   -0.492    0.028  -17.268    0.000
    b06_19_ (lmb4)   -0.525    0.032  -16.181    0.000
    b06_24_ (lmb5)    0.355    0.025   14.392    0.000
    b06_29_ (lmb6)    0.409    0.039   10.403    0.000
    b06_34_ (lmb7)   -0.548    0.032  -16.987    0.000
    b06_39_ (lmb8)   -0.524    0.027  -19.366    0.000
    b06_44_ (lmb9)    0.462    0.027   16.874    0.000
    b06_49_ (lm10)    0.321    0.051    6.247    0.000
    b06_54_ (lm11)   -0.533    0.026  -20.319    0.000
    b06_59_ (lm12)   -0.479    0.035  -13.698    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.549    0.025  178.914    0.000
   .bf06_09_1         4.441    0.026  170.833    0.000
   .bf06_14_1         1.609    0.029   56.032    0.000
   .bf06_19_1         1.985    0.032   61.253    0.000
   .bf06_24_1         4.664    0.024  193.333    0.000
   .bf06_29_1         4.251    0.037  114.255    0.000
   .bf06_34_1         1.816    0.032   55.945    0.000
   .bf06_39_1         1.565    0.028   56.296    0.000
   .bf06_44_1         4.425    0.027  161.125    0.000
   .bf06_49_1         3.816    0.048   80.268    0.000
   .bf06_54_1         1.468    0.027   53.906    0.000
   .bf06_59_1         1.903    0.034   56.042    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.451    0.023   19.693    0.000
   .bf06_09_t1        0.387    0.021   18.568    0.000
   .bf06_14_t1        0.455    0.025   18.321    0.000
   .bf06_19_t1        0.612    0.033   18.691    0.000
   .bf06_24_t1        0.366    0.019   19.077    0.000
   .bf06_29_t1        1.005    0.051   19.860    0.000
   .bf06_34_t1        0.591    0.032   18.447    0.000
   .bf06_39_t1        0.379    0.022   17.415    0.000
   .bf06_44_t1        0.425    0.023   18.437    0.000
   .bf06_49_t1        1.811    0.089   20.344    0.000
   .bf06_54_t1        0.344    0.020   17.009    0.000
   .bf06_59_t1        0.747    0.039   19.249    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_ideal1 =~ bf06_34_t1 =~    lambda7    -0.548    0.0323  -0.581
 2 neuro_ideal1 =~ bf06_54_t1 =~    lambda11   -0.533    0.0262  -0.672
 3 neuro_ideal1 =~ bf06_19_t1 =~    lambda4    -0.525    0.0325  -0.558
 4 neuro_ideal1 =~ bf06_39_t1 =~    lambda8    -0.524    0.0271  -0.648
 5 neuro_ideal1 =~ bf06_14_t1 =~    lambda3    -0.492    0.0285  -0.589
 6 neuro_ideal1 =~ bf06_59_t1 =~    lambda12   -0.479    0.0349  -0.484
 7 neuro_ideal1 =~ bf06_44_t1 =~    lambda9     0.462    0.0274   0.579
 8 neuro_ideal1 =~ bf06_09_t1 =~    lambda2     0.430    0.0260   0.569
 9 neuro_ideal1 =~ bf06_29_t1 =~    lambda6     0.409    0.0393   0.378
10 neuro_ideal1 =~ bf06_24_t1 =~    lambda5     0.355    0.0247   0.506
11 neuro_ideal1 =~ bf06_49_t1 =~    lambda10    0.321    0.0513   0.232
12 neuro_ideal1 =~ bf06_04_t1 =~    lambda1     0.311    0.0265   0.421

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2,
         bf06_29_t3_r = bf06_29_t3,
         bf06_04_t3_r = bf06_04_t3,
         bf06_24_t3_r = bf06_24_t3,
         bf06_44_t3_r = bf06_44_t3,
         bf06_09_t3_r = bf06_09_t3,
         bf06_49_t3_r = bf06_49_t3) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r, 
                  bf06_29_t3_r, bf06_04_t3_r, bf06_24_t3_r, bf06_44_t3_r, bf06_09_t3_r, bf06_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_34_t1, bf06_59_t1, bf06_29_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_54_t1, bf06_14_t1, bf06_09_t1_r, bf06_49_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_19_t1, bf06_39_t1, bf06_44_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_34_t2, bf06_59_t2, bf06_29_t2_r, bf06_04_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_54_t2, bf06_14_t2, bf06_09_t2_r, bf06_49_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_19_t2, bf06_39_t2, bf06_44_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par1_t3 = rowMeans(across(c(bf06_34_t3, bf06_59_t3, bf06_29_t3_r, bf06_04_t3_r)), na.rm=T),
         neuro_ideal_par2_t3 = rowMeans(across(c(bf06_54_t3, bf06_14_t3, bf06_09_t3_r, bf06_49_t3_r)), na.rm=T),
         neuro_ideal_par3_t3 = rowMeans(across(c(bf06_19_t3, bf06_39_t3, bf06_44_t3_r, bf06_24_t3_r)), na.rm=T))

3.2.9 Openness - current self

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 37 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               686.354
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2445.809
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.734
  Tucker-Lewis Index (TLI)                       0.675
                                                      
  Robust Comparative Fit Index (CFI)             0.734
  Robust Tucker-Lewis Index (TLI)                0.675

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14957.504
  Loglikelihood unrestricted model (H1)     -14614.327
                                                      
  Akaike (AIC)                               29987.007
  Bayesian (BIC)                             30157.751
  Sample-size adjusted Bayesian (SABIC)      30043.426

Root Mean Square Error of Approximation:

  RMSEA                                          0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.126
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.071

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.291    0.050    5.788    0.000
    b05_10_ (lmb2)   -0.455    0.033  -13.723    0.000
    b05_15_ (lmb3)   -0.517    0.038  -13.574    0.000
    b05_20_ (lmb4)   -0.756    0.042  -18.203    0.000
    b05_25_ (lmb5)    0.565    0.046   12.321    0.000
    b05_30_ (lmb6)    0.622    0.044   14.134    0.000
    b05_35_ (lmb7)   -0.688    0.037  -18.439    0.000
    b05_40_ (lmb8)   -0.546    0.036  -15.159    0.000
    b05_45_ (lmb9)    0.562    0.042   13.394    0.000
    b05_50_ (lm10)    0.700    0.048   14.469    0.000
    b05_55_ (lm11)    0.623    0.044   14.239    0.000
    b05_60_ (lm12)   -0.597    0.038  -15.746    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    2.927    0.046   63.757    0.000
   .bf05_10_1         4.107    0.032  128.627    0.000
   .bf05_15_1         3.642    0.036  101.863    0.000
   .bf05_20_1         3.862    0.040   95.629    0.000
   .bf05_25_1         2.363    0.043   54.499    0.000
   .bf05_30_1         2.473    0.042   58.767    0.000
   .bf05_35_1         3.999    0.036  109.961    0.000
   .bf05_40_1         3.968    0.035  113.040    0.000
   .bf05_45_1         2.099    0.040   52.442    0.000
   .bf05_50_1         2.399    0.046   51.800    0.000
   .bf05_55_1         2.435    0.042   57.439    0.000
   .bf05_60_1         3.539    0.037   96.935    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.703    0.084   20.359    0.000
   .bf05_10_t1        0.658    0.034   19.091    0.000
   .bf05_15_t1        0.817    0.044   18.616    0.000
   .bf05_20_t1        0.811    0.050   16.084    0.000
   .bf05_25_t1        1.276    0.066   19.321    0.000
   .bf05_30_t1        1.114    0.059   18.722    0.000
   .bf05_35_t1        0.647    0.041   15.919    0.000
   .bf05_40_t1        0.747    0.040   18.676    0.000
   .bf05_45_t1        1.041    0.055   19.015    0.000
   .bf05_50_t1        1.326    0.072   18.546    0.000
   .bf05_55_t1        1.134    0.060   18.955    0.000
   .bf05_60_t1        0.773    0.043   17.908    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_curr1 =~ bf05_20_t1 =~    lambda4    -0.756    0.0416  -0.643
 2 openn_curr1 =~ bf05_50_t1 =~    lambda10    0.700    0.0484   0.520
 3 openn_curr1 =~ bf05_35_t1 =~    lambda7    -0.688    0.0373  -0.650
 4 openn_curr1 =~ bf05_55_t1 =~    lambda11    0.623    0.0438   0.505
 5 openn_curr1 =~ bf05_30_t1 =~    lambda6     0.622    0.0440   0.508
 6 openn_curr1 =~ bf05_60_t1 =~    lambda12   -0.597    0.0379  -0.562
 7 openn_curr1 =~ bf05_25_t1 =~    lambda5     0.565    0.0458   0.447
 8 openn_curr1 =~ bf05_45_t1 =~    lambda9     0.562    0.0420   0.483
 9 openn_curr1 =~ bf05_40_t1 =~    lambda8    -0.546    0.0360  -0.534
10 openn_curr1 =~ bf05_15_t1 =~    lambda3    -0.517    0.0381  -0.496
11 openn_curr1 =~ bf05_10_t1 =~    lambda2    -0.455    0.0332  -0.489
12 openn_curr1 =~ bf05_05_t1 =~    lambda1     0.291    0.0502   0.217

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2,
         bf05_50_t3_r = bf05_50_t3,
         bf05_55_t3_r = bf05_55_t3,
         bf05_30_t3_r = bf05_30_t3,
         bf05_25_t3_r = bf05_25_t3,
         bf05_45_t3_r = bf05_45_t3,
         bf05_05_t3_r = bf05_05_t3) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r,
                  bf05_50_t3_r, bf05_55_t3_r, bf05_30_t3_r, bf05_25_t3_r, bf05_45_t3_r, bf05_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_60_t1, bf05_25_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_30_t1_r, bf05_45_t1_r, bf05_10_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_35_t1, bf05_55_t1_r, bf05_40_t1, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_60_t2, bf05_25_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_30_t2_r, bf05_45_t2_r, bf05_10_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_35_t2, bf05_55_t2_r, bf05_40_t2, bf05_15_t2)), na.rm=T),
         openn_curr_par1_t3 = rowMeans(across(c(bf05_20_t3, bf05_60_t3, bf05_25_t3_r, bf05_05_t3_r)), na.rm=T),
         openn_curr_par2_t3 = rowMeans(across(c(bf05_50_t3_r, bf05_30_t3_r, bf05_45_t3_r, bf05_10_t3)), na.rm=T),
         openn_curr_par3_t3 = rowMeans(across(c(bf05_35_t3, bf05_55_t3_r, bf05_40_t3, bf05_15_t3)), na.rm=T))

3.2.10 Openness - ideal self

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 43 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               460.240
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2053.128
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.796
  Tucker-Lewis Index (TLI)                       0.750
                                                      
  Robust Comparative Fit Index (CFI)             0.796
  Robust Tucker-Lewis Index (TLI)                0.751

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13794.655
  Loglikelihood unrestricted model (H1)     -13564.536
                                                      
  Akaike (AIC)                               27661.311
  Bayesian (BIC)                             27832.012
  Sample-size adjusted Bayesian (SABIC)      27717.687

Root Mean Square Error of Approximation:

  RMSEA                                          0.094
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.102
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.095
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.103
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.999

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.255    0.057    4.476    0.000
    b06_10_ (lmb2)   -0.418    0.027  -15.710    0.000
    b06_15_ (lmb3)   -0.383    0.025  -15.319    0.000
    b06_20_ (lmb4)   -0.548    0.033  -16.798    0.000
    b06_25_ (lmb5)    0.537    0.039   13.632    0.000
    b06_30_ (lmb6)    0.559    0.052   10.808    0.000
    b06_35_ (lmb7)   -0.545    0.034  -16.236    0.000
    b06_40_ (lmb8)   -0.511    0.042  -12.236    0.000
    b06_45_ (lmb9)    0.525    0.038   13.904    0.000
    b06_50_ (lm10)    0.590    0.041   14.308    0.000
    b06_55_ (lm11)    0.554    0.045   12.323    0.000
    b06_60_ (lm12)   -0.456    0.027  -17.166    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.020    0.051   59.265    0.000
   .bf06_10_1         4.492    0.026  173.867    0.000
   .bf06_15_1         4.595    0.024  191.631    0.000
   .bf06_20_1         4.331    0.032  137.244    0.000
   .bf06_25_1         1.823    0.037   48.684    0.000
   .bf06_30_1         2.012    0.048   42.001    0.000
   .bf06_35_1         4.296    0.032  133.053    0.000
   .bf06_40_1         3.899    0.039   99.042    0.000
   .bf06_45_1         1.639    0.036   45.721    0.000
   .bf06_50_1         1.996    0.039   50.743    0.000
   .bf06_55_1         2.159    0.042   51.370    0.000
   .bf06_60_1         4.528    0.026  174.121    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.129    0.104   20.396    0.000
   .bf06_10_t1        0.389    0.021   18.294    0.000
   .bf06_15_t1        0.340    0.019   18.225    0.000
   .bf06_20_t1        0.541    0.031   17.325    0.000
   .bf06_25_t1        0.897    0.047   18.909    0.000
   .bf06_30_t1        1.630    0.083   19.553    0.000
   .bf06_35_t1        0.583    0.033   17.571    0.000
   .bf06_40_t1        1.049    0.054   19.317    0.000
   .bf06_45_t1        0.812    0.043   18.754    0.000
   .bf06_50_t1        0.961    0.052   18.632    0.000
   .bf06_55_t1        1.188    0.062   19.162    0.000
   .bf06_60_t1        0.365    0.021   17.350    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_ideal1 =~ bf06_50_t1 =~    lambda10    0.590    0.0412   0.516
 2 openn_ideal1 =~ bf06_30_t1 =~    lambda6     0.559    0.0517   0.401
 3 openn_ideal1 =~ bf06_55_t1 =~    lambda11    0.554    0.0449   0.453
 4 openn_ideal1 =~ bf06_20_t1 =~    lambda4    -0.548    0.0326  -0.598
 5 openn_ideal1 =~ bf06_35_t1 =~    lambda7    -0.545    0.0336  -0.581
 6 openn_ideal1 =~ bf06_25_t1 =~    lambda5     0.537    0.0394   0.493
 7 openn_ideal1 =~ bf06_45_t1 =~    lambda9     0.525    0.0377   0.503
 8 openn_ideal1 =~ bf06_40_t1 =~    lambda8    -0.511    0.0418  -0.447
 9 openn_ideal1 =~ bf06_60_t1 =~    lambda12   -0.456    0.0266  -0.603
10 openn_ideal1 =~ bf06_10_t1 =~    lambda2    -0.418    0.0266  -0.556
11 openn_ideal1 =~ bf06_15_t1 =~    lambda3    -0.383    0.0250  -0.549
12 openn_ideal1 =~ bf06_05_t1 =~    lambda1     0.255    0.0569   0.172

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2,
         bf06_50_t3_r = bf06_50_t3,
         bf06_55_t3_r = bf06_55_t3,
         bf06_30_t3_r = bf06_30_t3,
         bf06_25_t3_r = bf06_25_t3,
         bf06_45_t3_r = bf06_45_t3,
         bf06_05_t3_r = bf06_05_t3) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r,
                  bf06_50_t3_r, bf06_55_t3_r, bf06_30_t3_r, bf06_25_t3_r, bf06_45_t3_r, bf06_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_25_t1_r, bf06_60_t1, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_30_t1_r, bf06_35_t1, bf06_40_t1, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_55_t1_r, bf06_20_t1, bf06_45_t1_r, bf06_10_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_25_t2_r, bf06_60_t2, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_30_t2_r, bf06_35_t2, bf06_40_t2, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_55_t2_r, bf06_20_t2, bf06_45_t2_r, bf06_10_t2)), na.rm=T),
         openn_ideal_par1_t3 = rowMeans(across(c(bf06_50_t3_r, bf06_25_t3_r, bf06_60_t3, bf06_05_t3)), na.rm=T),
         openn_ideal_par2_t3 = rowMeans(across(c(bf06_30_t3_r, bf06_35_t3, bf06_40_t3, bf06_15_t3)), na.rm=T),
         openn_ideal_par3_t3 = rowMeans(across(c(bf06_55_t3_r, bf06_20_t3, bf06_45_t3_r, bf06_10_t3)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
    mutate_all(~ifelse(is.nan(.), NA, .))

3.3 Recode all reverse-keyed items

This is only relevant for the facet-level models. All trait-level models rely on the parcels created above. However, the facet-level models pick the first item as the anchor indicator which is sometimes reverse-keyed for the latent factor. For analyses below I want to use just positively keyed variables (for neuroticism facets higher values should indicate higher neuroticism).

# save all relevant variable names
names_rev_scored <- df_sbsa2_wide_pers %>% select(ends_with("_r")) %>% colnames()
names_rev_scored_orig <- gsub("_r", "", names_rev_scored) # variable names without the "_r" -> these are the original variables

# drop original variables
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% select(-all_of(names_rev_scored_orig))
# recreate original variable names -> these are the recoded variables now!
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% rename_with(~ gsub("_r", "", .x))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time. Only doing this for the two (original) intervention groups for now, not for the waitlist control group, because they had different intervention schedules and our main focus lies on testing changes in the intervention groups.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + sw06_02_t3 + sw06_03_t3 + sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

sw06_01_t3 ~~ u1*sw06_01_t3
sw06_02_t3 ~~ u2*sw06_02_t3
sw06_03_t3 ~~ u3*sw06_03_t3
sw06_04_t3 ~~ u4*sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls2 ~~ swls3
swls1 ~~ swls3
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    39  678. 22384. 22569. 0.907 0.880 0.120 0.0468
2 weak         848    33  678. 22372. 22529. 0.908 0.893 0.113 0.0472
3 strong       848    27  688. 22370. 22498. 0.907 0.903 0.108 0.0485
4 strict       848    19  744. 22410. 22500. 0.900 0.907 0.106 0.0543
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 51 22384 22568 677.81                                    
fit_weak_swls       57 22372 22529 678.41    0.59442     0       6     0.9965
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_weak_swls   57 22372 22529 678.41                                       
fit_strong_swls 63 22370 22498 687.90     9.4974 0.026218       6     0.1475
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_swls 63 22370 22498 687.90                                       
fit_strict_swls 71 22410 22500 743.84     55.932 0.084056       8  2.908e-09
                   
fit_strong_swls    
fit_strict_swls ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + meaning_par2_t3 + meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

meaning_par1_t3 ~~ u1*meaning_par1_t3
meaning_par2_t3 ~~ u2*meaning_par2_t3
meaning_par3_t3 ~~ u3*meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  561. 16778. 16920. 0.910 0.865 0.162 0.0390
2 weak         848    26  566. 16775. 16899. 0.910 0.884 0.151 0.0423
3 strong       848    22  568. 16769. 16874. 0.910 0.899 0.141 0.0420
4 strict       848    16  586. 16775. 16851. 0.908 0.913 0.130 0.0476
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_meaning 24 16778 16920 561.41                            
fit_weak_meaning       28 16775 16898 566.50     5.0933 0.017954       4
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.2779
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   28 16775 16898 566.50                                    
fit_strong_meaning 32 16769 16874 568.49     1.9918     0       4     0.7373
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 32 16769 16874 568.49                                       
fit_strict_meaning 38 16775 16851 586.21     17.716 0.047987       6   0.006982
                     
fit_strong_meaning   
fit_strict_meaning **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + selfes_par2_t3 + selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

selfes_par1_t3 ~~ u1*selfes_par1_t3
selfes_par2_t3 ~~ u2*selfes_par2_t3
selfes_par3_t3 ~~ u3*selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  520. 12326. 12468. 0.924 0.886 0.156 0.0379
2 weak         848    26  523. 12320. 12443. 0.924 0.902 0.144 0.0407
3 strong       848    22  526. 12315. 12419. 0.924 0.915 0.135 0.0400
4 strict       848    16  532. 12310. 12385. 0.924 0.928 0.124 0.0427
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_selfes 24 12326 12468 520.25                                    
fit_weak_selfes       28 12320 12444 522.65     2.3939     0       4     0.6637
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   28 12320 12444 522.65                                    
fit_strong_selfes 32 12315 12419 525.54     2.8952     0       4     0.5755
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 32 12315 12419 525.54                                       
fit_strict_selfes 38 12310 12386 532.10     6.5563 0.010456       6     0.3638

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + concept_par2_t3 + concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

concept_par1_t3 ~~ u1*concept_par1_t3
concept_par2_t3 ~~ u2*concept_par2_t3
concept_par3_t3 ~~ u3*concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  393. 12613. 12755. 0.940 0.910 0.135 0.0290
2 weak         848    26  399. 12611. 12734. 0.940 0.923 0.125 0.0346
3 strong       848    22  401. 12605. 12710. 0.940 0.933 0.117 0.0351
4 strict       848    16  414. 12606. 12682. 0.939 0.942 0.108 0.0336
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_concept 24 12613 12755 392.65                            
fit_weak_concept       28 12611 12734 399.02     6.3783 0.026479       4
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.1726
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   28 12611 12734 399.02                                    
fit_strong_concept 32 12605 12710 401.24     2.2189     0       4     0.6956
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_concept 32 12605 12710 401.24                                       
fit_strict_concept 38 12606 12682 413.94       12.7 0.036287       6    0.04806
                    
fit_strong_concept  
fit_strict_concept *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given (very close to .05).

4.2 Big Five: from T1 to T2

Testing for measurement invariance of the latent BFI-2 traits across time, from T1 to T2.

4.2.1 Extraversion: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  425. 7518. 7603. 0.814 0.651 0.278 0.0710
2 weak         674    17  426. 7515. 7592. 0.814 0.721 0.249 0.0727
3 strong       674    15  441. 7525. 7593. 0.809 0.761 0.230 0.0739
4 strict       674    12  442. 7520. 7574. 0.810 0.810 0.205 0.0764
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 7517.6 7603.4 425.15                         
fit_weak_extra_curr       10 7514.8 7591.6 426.37     1.2267     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr           0.5415
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_curr   10 7514.8 7591.6 426.37                            
fit_strong_extra_curr 12 7525.0 7592.7 440.53     14.159 0.094974       2
                      Pr(>Chisq)    
fit_weak_extra_curr                 
fit_strong_extra_curr  0.0008422 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 7525.0 7592.7 440.53                         
fit_strict_extra_curr 15 7520.2 7574.4 441.73     1.1995     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.7531

Model fit still not satisfactory. Chi^2 tests indicate that weak measurement invariance is given.

4.2.2 Extraversion: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  164. 6257. 6343. 0.855 0.728 0.170 0.0577
2 weak         674    17  165. 6254. 6331. 0.856 0.783 0.152 0.0624
3 strong       674    15  166. 6251. 6319. 0.856 0.820 0.138 0.0645
4 strict       674    12  172. 6251. 6305. 0.854 0.854 0.125 0.0796
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 6256.9 6342.6 163.9                         
fit_weak_extra_ideal       10 6254.1 6330.8 165.1     1.1911     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.5513
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_weak_extra_ideal   10 6254.1 6330.8 165.1                         
fit_strong_extra_ideal 12 6251.3 6319.0 166.3     1.2085     0       2
                       Pr(>Chisq)
fit_weak_extra_ideal             
fit_strong_extra_ideal     0.5465
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_extra_ideal 12 6251.3 6319.0 166.30                            
fit_strict_extra_ideal 15 6251.1 6305.2 172.11      5.801 0.037219       3
                       Pr(>Chisq)
fit_strong_extra_ideal           
fit_strict_extra_ideal     0.1217

Model fit still not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  198. 6007. 6092. 0.866 0.749 0.188 0.0694
2 weak         674    17  199. 6003. 6080. 0.867 0.801 0.167 0.0739
3 strong       674    15  199. 6000. 6067. 0.868 0.835 0.152 0.0747
4 strict       674    12  200. 5994. 6048. 0.870 0.870 0.135 0.0726
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 6006.6 6092.3 198.11                         
fit_weak_agree_curr       10 6003.4 6080.2 198.99    0.87407     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr            0.646
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 6003.4 6080.2 198.99                         
fit_strong_agree_curr 12 5999.6 6067.3 199.12    0.12713     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.9384
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_curr 12 5999.6 6067.3 199.12                         
fit_strict_agree_curr 15 5994.3 6048.5 199.88    0.76272     0       3
                      Pr(>Chisq)
fit_strong_agree_curr           
fit_strict_agree_curr     0.8584

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.4 Agreeableness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  156. 5948. 6034. 0.907 0.826 0.166 0.0511
2 weak         674    17  157. 5945. 6021. 0.908 0.862 0.148 0.0554
3 strong       674    15  157. 5941. 6009. 0.909 0.886 0.134 0.0555
4 strict       674    12  166. 5944. 5998. 0.905 0.905 0.122 0.0743
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 5947.8 6033.6 155.87                         
fit_weak_agree_ideal       10 5944.7 6021.4 156.77    0.90156     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.6371
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_ideal   10 5944.7 6021.4 156.77                         
fit_strong_agree_ideal 12 5941.1 6008.8 157.12    0.34684     0       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.8408
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_ideal 12 5941.1 6008.8 157.12                            
fit_strict_agree_ideal 15 5944.2 5998.4 166.26     9.1354 0.055085       3
                       Pr(>Chisq)  
fit_strong_agree_ideal             
fit_strict_agree_ideal    0.02754 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.5 Conscientiousness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  219. 6528. 6614. 0.931 0.871 0.198 0.0329
2 weak         674    17  219. 6524. 6601. 0.932 0.898 0.176 0.0331
3 strong       674    15  221. 6522. 6589. 0.932 0.915 0.161 0.0339
4 strict       674    12  221. 6516. 6570. 0.933 0.933 0.143 0.0347
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 6527.8 6613.6 218.86                         
fit_weak_consc_curr       10 6524.0 6600.7 219.02    0.15856     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.9238
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_curr   10 6524.0 6600.7 219.02                         
fit_strong_consc_curr 12 6521.7 6589.4 220.72     1.7006     0       2
                      Pr(>Chisq)
fit_weak_consc_curr             
fit_strong_consc_curr     0.4273
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_curr 12 6521.7 6589.4 220.72                         
fit_strict_consc_curr 15 6516.3 6570.5 221.34    0.62505     0       3
                      Pr(>Chisq)
fit_strong_consc_curr           
fit_strict_consc_curr     0.8907

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.6 Conscientiousness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  136. 5143. 5229. 0.920 0.850 0.154 0.0436
2 weak         674    17  137. 5140. 5216. 0.921 0.882 0.137 0.0472
3 strong       674    15  137. 5136. 5204. 0.922 0.902 0.125 0.0484
4 strict       674    12  138. 5131. 5185. 0.923 0.923 0.110 0.0500
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_ideal  8 5143.4 5229.1 136.45                         
fit_weak_consc_ideal       10 5139.7 5216.4 136.80    0.35043     0       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.8393
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 5139.7 5216.4 136.80                         
fit_strong_consc_ideal 12 5136.3 5204.0 137.43    0.62624     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.7312
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC  BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_ideal 12 5136.3 5204 137.43                         
fit_strict_consc_ideal 15 5130.8 5185 137.93    0.50006     0       3
                       Pr(>Chisq)
fit_strong_consc_ideal           
fit_strict_consc_ideal     0.9189

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.7 Neuroticism: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  173. 6934. 7020. 0.949 0.905 0.175 0.0265
2 weak         674    17  173. 6930. 7007. 0.950 0.925 0.156 0.0271
3 strong       674    15  175. 6928. 6996. 0.950 0.937 0.142 0.0268
4 strict       674    12  180. 6927. 6981. 0.949 0.949 0.128 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 6934.0 7019.8 173.01                         
fit_weak_neuro_curr       10 6930.3 7007.1 173.32    0.30625     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr            0.858
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff     RMSEA Df diff
fit_weak_neuro_curr   10 6930.3 7007.1 173.32                             
fit_strong_neuro_curr 12 6928.4 6996.1 175.36     2.0421 0.0055866       2
                      Pr(>Chisq)
fit_weak_neuro_curr             
fit_strong_neuro_curr     0.3602
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_neuro_curr 12 6928.4 6996.1 175.36                            
fit_strict_neuro_curr 15 6926.9 6981.1 179.87     4.5075 0.027305       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.2116

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   674    19  15.5 5246. 5332. 0.995 0.991 0.0374 0.0129
2 weak         674    17  22.5 5249. 5326. 0.992 0.988 0.0431 0.0331
3 strong       674    15  24.8 5248. 5315. 0.992 0.989 0.0398 0.0369
4 strict       674    12  26.3 5243. 5297. 0.993 0.993 0.0335 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_neuro_ideal  8 5246.4 5332.1 15.549                            
fit_weak_neuro_ideal       10 5249.4 5326.1 22.520     6.9709 0.060725       2
                           Pr(>Chisq)  
fit_configural_neuro_ideal             
fit_weak_neuro_ideal          0.03064 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_ideal   10 5249.4 5326.1 22.52                            
fit_strong_neuro_ideal 12 5247.7 5315.4 24.81     2.2898 0.014663       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.3183
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5247.7 5315.4 24.810                         
fit_strict_neuro_ideal 15 5243.2 5297.3 26.319     1.5092     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.6801

Very good model fit across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is (barely) violated. Tests for strong and strict measurement invariance hold up, though. Probably ok to proceed, anyways.

4.2.9 Openness: current-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  155. 6334. 6420. 0.935 0.878 0.165 0.0370
2 weak         674    17  156. 6330. 6407. 0.936 0.903 0.147 0.0382
3 strong       674    15  160. 6330. 6398. 0.935 0.918 0.135 0.0396
4 strict       674    12  166. 6330. 6384. 0.933 0.933 0.122 0.0421
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 6333.8 6419.6 155.48                         
fit_weak_openn_curr       10 6330.1 6406.8 155.75    0.26746     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.8748
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_curr   10 6330.1 6406.8 155.75                            
fit_strong_openn_curr 12 6330.0 6397.7 159.66      3.914 0.037681       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.1413
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df  AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 6330 6397.7 159.66                            
fit_strict_openn_curr 15 6330 6384.2 165.68     6.0204 0.038649       3
                      Pr(>Chisq)
fit_strong_openn_curr           
fit_strict_openn_curr     0.1106

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.10 Openness: ideal-self (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  162. 6090. 6176. 0.886 0.786 0.169 0.0648
2 weak         674    17  168. 6092. 6169. 0.883 0.824 0.153 0.0844
3 strong       674    15  173. 6093. 6161. 0.880 0.851 0.141 0.0808
4 strict       674    12  182. 6096. 6150. 0.876 0.876 0.128 0.0711
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_openn_ideal  8 6090.1 6175.9 162.04                            
fit_weak_openn_ideal       10 6092.1 6168.8 168.04     5.9987 0.054465       2
                           Pr(>Chisq)  
fit_configural_openn_ideal             
fit_weak_openn_ideal          0.04982 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 6092.1 6168.8 168.04                            
fit_strong_openn_ideal 12 6093.1 6160.8 173.05     5.0096 0.047251       2
                       Pr(>Chisq)  
fit_weak_openn_ideal               
fit_strong_openn_ideal    0.08169 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 6093.1 6160.8 173.05                            
fit_strict_openn_ideal 15 6095.8 6150.0 181.78     8.7264 0.053217       3
                       Pr(>Chisq)  
fit_strong_openn_ideal             
fit_strict_openn_ideal    0.03316 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is just about violated at (very close to .05, though). Otherwise, strong measurement invariance is given. Probably ok to proceed!

4.3 Big Five: from T2 to T3

Testing for measurement invariance of the latent BFI-2 traits across time, from T2 to T3.

4.3.1 Extraversion: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + extra_curr_par2_t3 + extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural2_extra_curr <- cfa(configural2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak2_extra_curr <- cfa(weak2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong2_extra_curr <- cfa(strong2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

extra_curr_par1_t3 ~~ u1*extra_curr_par1_t3
extra_curr_par2_t3 ~~ u2*extra_curr_par2_t3
extra_curr_par3_t3 ~~ u3*extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict2_extra_curr <- cfa(strict2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  398. 6335. 6418. 0.808 0.640 0.291 0.0696
2 weak         577    17  399. 6333. 6407. 0.808 0.713 0.260 0.0747
3 strong       577    15  402. 6332. 6397. 0.808 0.760 0.237 0.0726
4 strict       577    12  403. 6327. 6379. 0.809 0.809 0.212 0.0731
# chi-square difference test for nested models 
anova(fit_configural2_extra_curr, fit_weak2_extra_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_curr  8 6335.3 6418.1 397.63                         
fit_weak2_extra_curr       10 6333.0 6407.1 399.35     1.7174     0       2
                           Pr(>Chisq)
fit_configural2_extra_curr           
fit_weak2_extra_curr           0.4237
anova(fit_weak2_extra_curr, fit_strong2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_extra_curr   10 6333.0 6407.1 399.35                            
fit_strong2_extra_curr 12 6331.8 6397.2 402.16     2.8056 0.026421       2
                       Pr(>Chisq)
fit_weak2_extra_curr             
fit_strong2_extra_curr     0.2459
anova(fit_strong2_extra_curr, fit_strict2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_curr 12 6331.8 6397.2 402.16                         
fit_strict2_extra_curr 15 6326.7 6379.0 403.07    0.91245     0       3
                       Pr(>Chisq)
fit_strong2_extra_curr           
fit_strict2_extra_curr     0.8224

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.2 Extraversion: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + extra_ideal_par2_t3 + extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural2_extra_ideal <- cfa(configural2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak2_extra_ideal <- cfa(weak2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong2_extra_ideal <- cfa(strong2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ u1*extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ u2*extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ u3*extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict2_extra_ideal <- cfa(strict2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  169. 5357. 5440. 0.844 0.707 0.187 0.0617
2 weak         577    17  170. 5353. 5427. 0.845 0.768 0.166 0.0639
3 strong       577    15  170. 5350. 5415. 0.847 0.808 0.151 0.0637
4 strict       577    12  172. 5346. 5398. 0.847 0.847 0.135 0.0675
# chi-square difference test for nested models 
anova(fit_configural2_extra_ideal, fit_weak2_extra_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_ideal  8 5356.9 5439.7 169.37                         
fit_weak2_extra_ideal       10 5353.3 5427.4 169.75    0.38629     0       2
                            Pr(>Chisq)
fit_configural2_extra_ideal           
fit_weak2_extra_ideal           0.8244
anova(fit_weak2_extra_ideal, fit_strong2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_extra_ideal   10 5353.3 5427.4 169.75                         
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34     0.5878     0       2
                        Pr(>Chisq)
fit_weak2_extra_ideal             
fit_strong2_extra_ideal     0.7454
anova(fit_strong2_extra_ideal, fit_strict2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34                         
fit_strict2_extra_ideal 15 5345.9 5398.2 172.39     2.0524     0       3
                        Pr(>Chisq)
fit_strong2_extra_ideal           
fit_strict2_extra_ideal     0.5616

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.3 Agreeableness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + agree_curr_par2_t3 + agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural2_agree_curr <- cfa(configural2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak2_agree_curr <- cfa(weak2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong2_agree_curr <- cfa(strong2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

agree_curr_par1_t3 ~~ u1*agree_curr_par1_t3
agree_curr_par2_t3 ~~ u2*agree_curr_par2_t3
agree_curr_par3_t3 ~~ u3*agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict2_agree_curr <- cfa(strict2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  239. 5005. 5088. 0.839 0.698 0.224 0.0754
2 weak         577    17  240. 5002. 5076. 0.840 0.760 0.200 0.0764
3 strong       577    15  240. 4998. 5063. 0.841 0.802 0.181 0.0767
4 strict       577    12  242. 4994. 5046. 0.842 0.842 0.162 0.0822
# chi-square difference test for nested models 
anova(fit_configural2_agree_curr, fit_weak2_agree_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_agree_curr  8 5005.3 5088.1 239.49                         
fit_weak2_agree_curr       10 5001.6 5075.7 239.74    0.24587     0       2
                           Pr(>Chisq)
fit_configural2_agree_curr           
fit_weak2_agree_curr           0.8843
anova(fit_weak2_agree_curr, fit_strong2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_curr   10 5001.6 5075.7 239.74                         
fit_strong2_agree_curr 12 4997.7 5063.1 239.83   0.093468     0       2
                       Pr(>Chisq)
fit_weak2_agree_curr             
fit_strong2_agree_curr     0.9543
anova(fit_strong2_agree_curr, fit_strict2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_curr 12 4997.7 5063.1 239.83                         
fit_strict2_agree_curr 15 4993.8 5046.1 241.97     2.1344     0       3
                       Pr(>Chisq)
fit_strong2_agree_curr           
fit_strict2_agree_curr      0.545

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.4 Agreeableness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + agree_ideal_par2_t3 + agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural2_agree_ideal <- cfa(configural2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak2_agree_ideal <- cfa(weak2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong2_agree_ideal <- cfa(strong2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ u1*agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ u2*agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ u3*agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict2_agree_ideal <- cfa(strict2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  183. 4928. 5011. 0.891 0.795 0.195 0.0537
2 weak         577    17  186. 4927. 5001. 0.890 0.835 0.175 0.0717
3 strong       577    15  188. 4924. 4990. 0.891 0.863 0.159 0.0724
4 strict       577    12  189. 4919. 4972. 0.892 0.892 0.142 0.0654
# chi-square difference test for nested models 
anova(fit_configural2_agree_ideal, fit_weak2_agree_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_agree_ideal  8 4928.0 5010.8 183.39                            
fit_weak2_agree_ideal       10 4927.1 5001.2 186.45     3.0622 0.030339       2
                            Pr(>Chisq)
fit_configural2_agree_ideal           
fit_weak2_agree_ideal           0.2163
anova(fit_weak2_agree_ideal, fit_strong2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_ideal   10 4927.1 5001.2 186.45                         
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84     1.3937     0       2
                        Pr(>Chisq)
fit_weak2_agree_ideal             
fit_strong2_agree_ideal     0.4982
anova(fit_strong2_agree_ideal, fit_strict2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84                         
fit_strict2_agree_ideal 15 4919.5 4971.7 188.82    0.97691     0       3
                        Pr(>Chisq)
fit_strong2_agree_ideal           
fit_strict2_agree_ideal     0.8068

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.5 Conscientiousness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + consc_curr_par2_t3 + consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural2_consc_curr <- cfa(configural2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak2_consc_curr <- cfa(weak2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong2_consc_curr <- cfa(strong2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

consc_curr_par1_t3 ~~ u1*consc_curr_par1_t3
consc_curr_par2_t3 ~~ u2*consc_curr_par2_t3
consc_curr_par3_t3 ~~ u3*consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict2_consc_curr <- cfa(strict2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  173. 5578. 5661. 0.940 0.888 0.189 0.0312
2 weak         577    17  173. 5575. 5649. 0.941 0.912 0.168 0.0317
3 strong       577    15  174. 5571. 5637. 0.942 0.927 0.153 0.0314
4 strict       577    12  174. 5566. 5618. 0.942 0.942 0.136 0.0317
# chi-square difference test for nested models 
anova(fit_configural2_consc_curr, fit_weak2_consc_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_consc_curr  8 5578.5 5661.3 173.11                         
fit_weak2_consc_curr       10 5574.6 5648.7 173.29     0.1738     0       2
                           Pr(>Chisq)
fit_configural2_consc_curr           
fit_weak2_consc_curr           0.9168
anova(fit_weak2_consc_curr, fit_strong2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_consc_curr   10 5574.6 5648.7 173.29                         
fit_strong2_consc_curr 12 5571.1 5636.5 173.79    0.50808     0       2
                       Pr(>Chisq)
fit_weak2_consc_curr             
fit_strong2_consc_curr     0.7757
anova(fit_strong2_consc_curr, fit_strict2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_consc_curr 12 5571.1 5636.5 173.79                         
fit_strict2_consc_curr 15 5565.8 5618.1 174.44    0.64404     0       3
                       Pr(>Chisq)
fit_strong2_consc_curr           
fit_strict2_consc_curr     0.8863

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.6 Conscientiousness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + consc_ideal_par2_t3 + consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural2_consc_ideal <- cfa(configural2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak2_consc_ideal <- cfa(weak2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong2_consc_ideal <- cfa(strong2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ u1*consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ u2*consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ u3*consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict2_consc_ideal <- cfa(strict2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  70.8 4208. 4291. 0.959 0.923 0.117  0.0291
2 weak         577    17  73.4 4206. 4281. 0.959 0.938 0.105  0.0542
3 strong       577    15  75.8 4205. 4270. 0.958 0.948 0.0960 0.0561
4 strict       577    12  91.9 4215. 4267. 0.950 0.950 0.0942 0.0898
# chi-square difference test for nested models 
anova(fit_configural2_consc_ideal, fit_weak2_consc_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_consc_ideal  8 4207.9 4290.7 70.821                            
fit_weak2_consc_ideal       10 4206.4 4280.5 73.376     2.5544 0.021919       2
                            Pr(>Chisq)
fit_configural2_consc_ideal           
fit_weak2_consc_ideal           0.2788
anova(fit_weak2_consc_ideal, fit_strong2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_consc_ideal   10 4206.4 4280.5 73.376                            
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801     2.4256 0.019204       2
                        Pr(>Chisq)
fit_weak2_consc_ideal             
fit_strong2_consc_ideal     0.2974
anova(fit_strong2_consc_ideal, fit_strict2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801                            
fit_strict2_consc_ideal 15 4214.9 4267.2 91.852     16.051 0.086831       3
                        Pr(>Chisq)   
fit_strong2_consc_ideal              
fit_strict2_consc_ideal   0.001107 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.3.7 Neuroticism: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + neuro_curr_par2_t3 + neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural2_neuro_curr <- cfa(configural2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak2_neuro_curr <- cfa(weak2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong2_neuro_curr <- cfa(strong2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ u1*neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ u2*neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ u3*neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict2_neuro_curr <- cfa(strict2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  99.1 5872. 5955. 0.968 0.939 0.140  0.0219
2 weak         577    17  99.4 5868. 5942. 0.968 0.952 0.124  0.0232
3 strong       577    15 101.  5866. 5931. 0.968 0.961 0.113  0.0232
4 strict       577    12 101.  5860. 5913. 0.969 0.969 0.0999 0.0243
# chi-square difference test for nested models 
anova(fit_configural2_neuro_curr, fit_weak2_neuro_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_neuro_curr  8 5872.1 5954.9 99.065                         
fit_weak2_neuro_curr       10 5868.4 5942.5 99.397    0.33158     0       2
                           Pr(>Chisq)
fit_configural2_neuro_curr           
fit_weak2_neuro_curr           0.8472
anova(fit_weak2_neuro_curr, fit_strong2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC   Chisq Chisq diff RMSEA Df diff
fit_weak2_neuro_curr   10 5868.4 5942.5  99.397                         
fit_strong2_neuro_curr 12 5865.6 5930.9 100.582     1.1852     0       2
                       Pr(>Chisq)
fit_weak2_neuro_curr             
fit_strong2_neuro_curr     0.5529
anova(fit_strong2_neuro_curr, fit_strict2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_neuro_curr 12 5865.6 5930.9 100.58                         
fit_strict2_neuro_curr 15 5860.4 5912.7 101.46    0.87338     0       3
                       Pr(>Chisq)
fit_strong2_neuro_curr           
fit_strict2_neuro_curr     0.8318

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.8 Neuroticism: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + neuro_ideal_par2_t3 + neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural2_neuro_ideal <- cfa(configural2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak2_neuro_ideal <- cfa(weak2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong2_neuro_ideal <- cfa(strong2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ u1*neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ u2*neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ u3*neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict2_neuro_ideal <- cfa(strict2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  37.4 4514. 4596. 0.978 0.958 0.0798 0.0219
2 weak         577    17  40.1 4512. 4586. 0.977 0.966 0.0722 0.0309
3 strong       577    15  43.1 4511. 4577. 0.976 0.971 0.0670 0.0364
4 strict       577    12  48.3 4510. 4563. 0.975 0.975 0.0620 0.0280
# chi-square difference test for nested models 
anova(fit_configural2_neuro_ideal, fit_weak2_neuro_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_neuro_ideal  8 4513.5 4596.3 37.415                            
fit_weak2_neuro_ideal       10 4512.2 4586.3 40.113     2.6987 0.024606       2
                            Pr(>Chisq)
fit_configural2_neuro_ideal           
fit_weak2_neuro_ideal           0.2594
anova(fit_weak2_neuro_ideal, fit_strong2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_weak2_neuro_ideal   10 4512.2 4586.3 40.113                           
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122     3.0084 0.02956       2
                        Pr(>Chisq)
fit_weak2_neuro_ideal             
fit_strong2_neuro_ideal     0.2222
anova(fit_strong2_neuro_ideal, fit_strict2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122                            
fit_strict2_neuro_ideal 15 4510.4 4562.7 48.255     5.1328 0.035101       3
                        Pr(>Chisq)
fit_strong2_neuro_ideal           
fit_strict2_neuro_ideal     0.1623

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.3.9 Openness: current-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + openn_curr_par2_t3 + openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural2_openn_curr <- cfa(configural2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak2_openn_curr <- cfa(weak2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong2_openn_curr <- cfa(strong2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

openn_curr_par1_t3 ~~ u1*openn_curr_par1_t3
openn_curr_par2_t3 ~~ u2*openn_curr_par2_t3
openn_curr_par3_t3 ~~ u3*openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict2_openn_curr <- cfa(strict2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  208. 5257. 5340. 0.911 0.834 0.208 0.0423
2 weak         577    17  209. 5254. 5328. 0.912 0.868 0.186 0.0439
3 strong       577    15  209. 5250. 5315. 0.913 0.891 0.169 0.0437
4 strict       577    12  212. 5247. 5299. 0.913 0.913 0.151 0.0447
# chi-square difference test for nested models 
anova(fit_configural2_openn_curr, fit_weak2_openn_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_curr  8 5257.1 5339.9 207.96                         
fit_weak2_openn_curr       10 5253.9 5328.0 208.72    0.76522     0       2
                           Pr(>Chisq)
fit_configural2_openn_curr           
fit_weak2_openn_curr           0.6821
anova(fit_weak2_openn_curr, fit_strong2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_openn_curr   10 5253.9 5328.0 208.72                         
fit_strong2_openn_curr 12 5249.9 5315.3 208.75   0.028496     0       2
                       Pr(>Chisq)
fit_weak2_openn_curr             
fit_strong2_openn_curr     0.9859
anova(fit_strong2_openn_curr, fit_strict2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_curr 12 5249.9 5315.3 208.75                         
fit_strict2_openn_curr 15 5246.9 5299.2 211.71     2.9624     0       3
                       Pr(>Chisq)
fit_strong2_openn_curr           
fit_strict2_openn_curr     0.3975

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.10 Openness: ideal-self (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + openn_ideal_par2_t3 + openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural2_openn_ideal <- cfa(configural2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak2_openn_ideal <- cfa(weak2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong2_openn_ideal <- cfa(strong2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ u1*openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ u2*openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ u3*openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict2_openn_ideal <- cfa(strict2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   576    19  116. 5248. 5331. 0.905 0.822 0.153 0.0658
2 weak         576    17  117. 5245. 5319. 0.906 0.859 0.136 0.0712
3 strong       576    15  121. 5246. 5311. 0.904 0.880 0.126 0.0739
4 strict       576    12  123. 5241. 5294. 0.905 0.905 0.112 0.0683
# chi-square difference test for nested models 
anova(fit_configural2_openn_ideal, fit_weak2_openn_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_ideal  8 5248.2 5330.9 115.88                         
fit_weak2_openn_ideal       10 5245.4 5319.4 117.09     1.2118     0       2
                            Pr(>Chisq)
fit_configural2_openn_ideal           
fit_weak2_openn_ideal           0.5456
anova(fit_weak2_openn_ideal, fit_strong2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_openn_ideal   10 5245.4 5319.4 117.09                            
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41     4.3138 0.044817       2
                        Pr(>Chisq)
fit_weak2_openn_ideal             
fit_strong2_openn_ideal     0.1157
anova(fit_strong2_openn_ideal, fit_strict2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41                         
fit_strict2_openn_ideal 15 5241.5 5293.8 123.19     1.7786     0       3
                        Pr(>Chisq)
fit_strong2_openn_ideal           
fit_strict2_openn_ideal     0.6196

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.


5 Descriptives

5.1 Sample size

How many participants at each time point and in each condition?

df_sbsa2 %>% group_by(time, rando) %>% tally()
# A tibble: 9 × 3
# Groups:   time [3]
   time rando                n
  <dbl> <chr>            <int>
1     1 Self-Acceptance    336
2     1 Self-Improvement   338
3     1 Waitlist-Control   174
4     2 Self-Acceptance    284
5     2 Self-Improvement   293
6     2 Waitlist-Control   147
7     3 Self-Acceptance    252
8     3 Self-Improvement   262
9     3 Waitlist-Control   125

5.2 Demographics

Gender and age distribution

# across all participants
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  mutate(gender_num = ifelse(gender=="Female", 1, 0)) %>% 
  summarise(n = n(), women = sum(gender_num), m_age = mean(age, na.rm=T), 
            sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 1 × 6
      n women m_age sd_age min_age max_age
  <int> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
1   849   421  30.6   9.65      18      75
df_sbsa2 %>% group_by(time, rando) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 9 × 7
# Groups:   time [3]
   time rando                n m_age sd_age min_age max_age
  <dbl> <chr>            <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance    336  30.5   8.87      20      65
2     1 Self-Improvement   338  30.3   9.38      18      69
3     1 Waitlist-Control   174  31.2  11.2       19      75
4     2 Self-Acceptance    284  30.8   8.98      20      65
5     2 Self-Improvement   293  30.3   9.30      20      69
6     2 Waitlist-Control   147  31.9  11.8       19      75
7     3 Self-Acceptance    252  31.1   8.96      20      65
8     3 Self-Improvement   262  30.7   9.41      20      69
9     3 Waitlist-Control   125  32.4  12.3       19      75
df_sbsa2 %>% group_by(time, rando, gender) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 18 × 8
# Groups:   time, rando [9]
    time rando            gender     n m_age sd_age min_age max_age
   <dbl> <chr>            <chr>  <int> <dbl>  <dbl>   <dbl>   <dbl>
 1     1 Self-Acceptance  Female   169  31     9.82      20      65
 2     1 Self-Acceptance  Male     167  30.0   7.79      20      58
 3     1 Self-Improvement Female   166  31.0   9.15      20      65
 4     1 Self-Improvement Male     172  29.8   9.58      18      69
 5     1 Waitlist-Control Female    85  31.9  11.4       21      69
 6     1 Waitlist-Control Male      89  30.6  11.0       19      75
 7     2 Self-Acceptance  Female   142  30.9   9.83      20      65
 8     2 Self-Acceptance  Male     142  30.8   8.07      20      58
 9     2 Self-Improvement Female   143  30.8   8.82      20      59
10     2 Self-Improvement Male     150  29.9   9.75      20      69
11     2 Waitlist-Control Female    75  33.0  12.4       21      69
12     2 Waitlist-Control Male      72  30.7  11.1       19      75
13     3 Self-Acceptance  Female   127  30.8   9.64      20      65
14     3 Self-Acceptance  Male     125  31.5   8.23      20      58
15     3 Self-Improvement Female   126  31     8.65      20      56
16     3 Self-Improvement Male     136  30.4  10.1       20      69
17     3 Waitlist-Control Female    65  33.6  12.9       21      69
18     3 Waitlist-Control Male      60  31.0  11.6       19      75

Other demographics (from Prolific info):

# across all participants: ethnicity
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(ethnicity) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 6 × 3
  ethnicity     n   prop
  <chr>     <int>  <dbl>
1 White       553 65.1  
2 Black       207 24.4  
3 Mixed        38  4.48 
4 Asian        28  3.30 
5 Other        20  2.36 
6 <NA>          3  0.353
# across all participants: country of residence
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(country) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3)) %>% print(n=20)
# A tibble: 30 × 3
   country            n   prop
   <chr>          <int>  <dbl>
 1 South Africa     236 27.8  
 2 Poland           119 14.0  
 3 Portugal         119 14.0  
 4 United Kingdom    96 11.3  
 5 Italy             73  8.60 
 6 Spain             46  5.42 
 7 Mexico            27  3.18 
 8 Greece            25  2.94 
 9 Hungary           18  2.12 
10 Canada            17  2.00 
11 Netherlands       10  1.18 
12 France             9  1.06 
13 Ireland            7  0.824
14 Czech Republic     6  0.707
15 Israel             5  0.589
16 United States      5  0.589
17 Australia          4  0.471
18 Chile              4  0.471
19 Estonia            4  0.471
20 Slovenia           4  0.471
# ℹ 10 more rows
# across all participants: student status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(student) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 3 × 3
  student     n  prop
  <chr>   <int> <dbl>
1 No        425  50.1
2 Yes       314  37.0
3 <NA>      110  13.0
# across all participants: employment status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(employed) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 7 × 3
  employed                                                     n   prop
  <chr>                                                    <int>  <dbl>
1 Full-Time                                                  385 45.3  
2 Part-Time                                                  123 14.5  
3 Unemployed (and job seeking)                               122 14.4  
4 <NA>                                                       121 14.3  
5 Other                                                       62  7.30 
6 Not in paid work (e.g. homemaker', 'retired or disabled)    28  3.30 
7 Due to start a new job within the next month                 8  0.942

5.3 Internal consistencies

On the trait/dimensional level:

# created in study 2 cleaning script 
kable(int_consist_traits_st2, digits = 3)
trait rel_alpha_current rel_alpha_ideal rel_omega_t_current rel_omega_t_ideal rel_omega_h_current rel_omega_h_ideal
lifesat 0.881 NA 0.897 NA 0.794 NA
meaning 0.881 NA 0.944 NA 0.558 NA
selfes 0.908 NA 0.925 NA 0.718 NA
concept 0.902 NA 0.919 NA 0.848 NA
extra 0.835 0.697 0.872 0.746 0.651 0.512
agree 0.779 0.775 0.836 0.830 0.521 0.654
consc 0.878 0.813 0.903 0.854 0.699 0.692
neuro 0.901 0.781 0.918 0.828 0.771 0.692
openn 0.814 0.769 0.856 0.826 0.618 0.579

McDonald’s omega only really makes sense for the Big Five dimensions (with their three facets each) but I’ve added it for the well-being measures as well. Keep in mind that a few of the omega computations for the well-being measures only converged with error messages. These constructs were not neccessarily intended to be tested in this multidimensional manner for internal consistency.

On the facet level:

# created in study 2 cleaning script 
kable(int_consist_facets_st2, digits = 3)
facet rel_alpha_current rel_alpha_ideal
socia 0.821 0.599
asser 0.716 0.514
energ 0.680 0.486
compa 0.529 0.459
respe 0.682 0.657
trust 0.656 0.632
organ 0.823 0.581
produ 0.774 0.690
respo 0.689 0.592
anxie 0.757 0.439
depre 0.813 0.606
volat 0.816 0.680
curio 0.657 0.592
aesth 0.672 0.526
imagi 0.718 0.580

5.4 General change/acceptance goals

Summary stats:

table(df_sbsa2$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 34  81 179  89  27 
summary(df_sbsa2$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   2.000   3.000   2.985   4.000   5.000    1801 
table(df_sbsa2$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  9  12  65 121 203 
summary(df_sbsa2$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   4.000   4.000   4.212   5.000   5.000    1801 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa2 %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa2 %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.5 Facet-specific change/acceptance goals

Self-Improvement

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)


6 Confirmatory results

6.1 H1: Well-being - similarity correlations (H4 in paper)

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal self-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal self-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal-self rating for each Big Five trait and facet.

6.1.1 Profile similarity

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_profile <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current self and ideal self personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

6.1.1.1 Change in this relation over time and across intervention groups

Computations:

Show the code
# T1
cormat_profile_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T2
cormat_profile_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T3
cormat_profile_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

T1

First assessment: Self-improvement group

corrplot(cormat_profile_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_profile_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T2
Second assessment: Self-improvement group

corrplot(cormat_profile_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_profile_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T3
Third assessment: Self-improvement group

corrplot(cormat_profile_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_profile_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

No pronounced differences across time or groups.

6.1.2 Individual traits: squared differences

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_sqtraits <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa2[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current self and ideal self personality. Especially pronounced negative correlations for neuroticism, extraversion, and conscientiousness (in that order). On the facet-level, we see that depression is the facet with the highest correlation of its squared difference with well-being, followed by energy. Within conscientiousness, productiveness has the strongest correlation.

6.1.2.1 Change in this relation over time and across intervention groups

Only looking at the trait level for now!

Computations:

Show the code
# T1
cormat_sqtraits_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T2
cormat_sqtraits_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T3
cormat_sqtraits_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

T1

First assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

High similarity at T1.

T2
Second assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T2, attenuated correlations for agreeableness and (to a lesser degree) conscientiousness in the self-improvement group compared to T1.

T3
Third assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T3, slightly lower correlations for neuroticism in the self-acceptance group (compared to the self-improvement group). But only small difference.

6.1.2.2 Exploratory: Controlling for initial trait levels

Additional, exploratory analysis: Are the relationships of the squared trait differences with well-being similar when we control for initial trait levels (at T1)?

Example with extraversion:

cor(df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(swls), 
    df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(extra_sqdiff), 
    use = "pairwise.complete.obs") %>% round(2)
[1] -0.38
# basic model to replicate the correlation
mod_ex_1 <- lm(swls ~ extra_sqdiff, data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_1)$coef
               Estimate Std. Error   t value      Pr(>|t|)
(Intercept)   3.0767166 0.04770753  64.49122 8.286778e-290
extra_sqdiff -0.1877679 0.01767740 -10.62192  1.821543e-24
effectsize::standardize_parameters(mod_ex_1)
# Standardization method: refit

Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |   9.13e-16 | [-0.07,  0.07]
extra_sqdiff |      -0.38 | [-0.45, -0.31]
# adjusted model controlling for initial trait level
mod_ex_2 <- lm(swls ~ extra_sqdiff + extra_comb_curr, 
               data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_2)$coef
                   Estimate Std. Error   t value     Pr(>|t|)
(Intercept)      1.91350186 0.23355736  8.192856 1.294315e-15
extra_sqdiff    -0.09460717 0.02524177 -3.748040 1.935991e-04
extra_comb_curr  0.35295712 0.06942857  5.083745 4.807365e-07
effectsize::standardize_parameters(mod_ex_2)
# Standardization method: refit

Parameter       | Std. Coef. |         95% CI
---------------------------------------------
(Intercept)     |   9.58e-16 | [-0.07,  0.07]
extra_sqdiff    |      -0.19 | [-0.29, -0.09]
extra_comb_curr |       0.26 | [ 0.16,  0.36]

Reduced correlation (effect size) in the adjusted model but still significant.

Only T1:

Show the code
# prepare df
df_check_adjusted <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control" & time==1) %>% 
  select(pid, rando, 
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_sqdiff")) %>% 
      pivot_longer(ends_with("_sqdiff"), 
                   names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ swls + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_unlist <- as.data.frame(summary(df_check_adjusted_swls[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls)) {
  df_check_adjusted_swls_unlist <- 
    bind_rows(df_check_adjusted_swls_unlist, 
              as.data.frame(summary(df_check_adjusted_swls[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_unlist <- df_check_adjusted_swls_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ meaning + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_unlist <- as.data.frame(summary(df_check_adjusted_meaning[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_meaning)) {
  df_check_adjusted_meaning_unlist <- 
    bind_rows(df_check_adjusted_meaning_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_unlist <- df_check_adjusted_meaning_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ selfes + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_unlist <- as.data.frame(summary(df_check_adjusted_selfes[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_selfes)) {
  df_check_adjusted_selfes_unlist <- 
    bind_rows(df_check_adjusted_selfes_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_unlist <- df_check_adjusted_selfes_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ concept + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_unlist <- as.data.frame(summary(df_check_adjusted_concept[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_concept)) {
  df_check_adjusted_concept_unlist <- 
    bind_rows(df_check_adjusted_concept_unlist, 
              as.data.frame(summary(df_check_adjusted_concept[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_unlist <- df_check_adjusted_concept_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.107 0.000 *** -0.138 0.000 *** -0.089 0.005 ** -0.089 0.002 **
agreeableness -0.117 0.001 *** -0.127 0.000 *** -0.164 0.000 *** -0.190 0.000 ***
conscientiousness -0.092 0.001 *** -0.078 0.003 ** -0.076 0.007 ** -0.052 0.056
neuroticism -0.035 0.138 -0.056 0.018 * -0.045 0.107 -0.005 0.843
openness -0.081 0.017 * -0.108 0.001 ** -0.099 0.004 ** -0.098 0.004 **
sociability -0.109 0.000 *** -0.136 0.000 *** -0.102 0.001 ** -0.082 0.006 **
assertiveness -0.084 0.005 ** -0.107 0.000 *** -0.029 0.370 -0.105 0.001 ***
energy -0.083 0.006 ** -0.099 0.001 *** -0.111 0.001 *** -0.079 0.007 **
compassion -0.085 0.019 * -0.060 0.096 -0.107 0.003 ** -0.149 0.000 ***
respectfulness -0.072 0.026 * -0.094 0.004 ** -0.104 0.002 ** -0.100 0.002 **
trust -0.062 0.063 -0.089 0.008 ** -0.098 0.004 ** -0.136 0.000 ***
organization -0.067 0.011 * -0.070 0.007 ** -0.049 0.066 -0.051 0.055
productiveness -0.063 0.008 ** -0.061 0.011 * -0.045 0.073 -0.057 0.021 *
responsibility -0.135 0.000 *** -0.109 0.000 *** -0.134 0.000 *** -0.092 0.004 **
anxiety -0.032 0.197 -0.028 0.251 -0.034 0.203 0.011 0.669
depression -0.048 0.044 * -0.066 0.006 ** -0.068 0.021 * -0.010 0.670
volatility -0.068 0.006 ** -0.102 0.000 *** -0.077 0.004 ** -0.063 0.018 *
curiosity -0.114 0.001 *** -0.120 0.000 *** -0.096 0.004 ** -0.124 0.000 ***
aesthetic -0.009 0.801 -0.096 0.007 ** -0.044 0.223 -0.085 0.018 *
imagination -0.084 0.005 ** -0.107 0.000 *** -0.104 0.001 *** -0.070 0.021 *

Effects mostly still significant but not always at the p < .001 level. Correlation is especially stongly reduced for neuroticism and its facets depression and anxiety. Effects are still relatively pronounced for extraversion (strongest for sociability) and conscientiousness (strongest for responsibility). Volatility facet from neuroticism also shows comparatively strong effects.

Across all time points, using a mixed model:

Show the code
# prepare df
df_check_adjusted_all <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control") %>% 
  select(pid, rando, time,
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_comb_curr")) %>% 
      pivot_longer(ends_with("_comb_curr"), 
                   names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ swls + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_all_unlist <- as.data.frame(summary(df_check_adjusted_swls_all[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls_all)) {
  df_check_adjusted_swls_all_unlist <- 
    bind_rows(df_check_adjusted_swls_all_unlist, 
              as.data.frame(summary(df_check_adjusted_swls_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_all_unlist <- df_check_adjusted_swls_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ meaning + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_all_unlist <- as.data.frame(summary(df_check_adjusted_meaning_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_meaning_all)) {
  df_check_adjusted_meaning_all_unlist <- 
    bind_rows(df_check_adjusted_meaning_all_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_all_unlist <- df_check_adjusted_meaning_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ selfes + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_all_unlist <- as.data.frame(summary(df_check_adjusted_selfes_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_selfes_all)) {
  df_check_adjusted_selfes_all_unlist <- 
    bind_rows(df_check_adjusted_selfes_all_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_all_unlist <- df_check_adjusted_selfes_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ concept + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_all_unlist <- as.data.frame(summary(df_check_adjusted_concept_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_concept_all)) {
  df_check_adjusted_concept_all_unlist <- 
    bind_rows(df_check_adjusted_concept_all_unlist, 
              as.data.frame(summary(df_check_adjusted_concept_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_all_unlist <- df_check_adjusted_concept_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_all_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_all_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.228 0.000 *** -0.207 0.000 *** -0.259 0.000 *** -0.163 0.000 ***
agreeableness -0.142 0.000 *** -0.138 0.000 *** -0.210 0.000 *** -0.202 0.000 ***
conscientiousness -0.184 0.000 *** -0.144 0.000 *** -0.185 0.000 *** -0.120 0.000 ***
neuroticism -0.197 0.000 *** -0.198 0.000 *** -0.289 0.000 *** -0.186 0.000 ***
openness -0.107 0.000 *** -0.104 0.000 *** -0.121 0.000 *** -0.104 0.000 ***
sociability -0.187 0.000 *** -0.180 0.000 *** -0.230 0.000 *** -0.151 0.000 ***
assertiveness -0.148 0.000 *** -0.158 0.000 *** -0.144 0.000 *** -0.141 0.000 ***
energy -0.222 0.000 *** -0.171 0.000 *** -0.223 0.000 *** -0.142 0.000 ***
compassion -0.107 0.000 *** -0.070 0.006 ** -0.145 0.000 *** -0.160 0.000 ***
respectfulness -0.087 0.000 *** -0.082 0.000 *** -0.129 0.000 *** -0.103 0.000 ***
trust -0.105 0.000 *** -0.125 0.000 *** -0.162 0.000 *** -0.179 0.000 ***
organization -0.125 0.000 *** -0.109 0.000 *** -0.117 0.000 *** -0.080 0.000 ***
productiveness -0.196 0.000 *** -0.150 0.000 *** -0.195 0.000 *** -0.132 0.000 ***
responsibility -0.177 0.000 *** -0.122 0.000 *** -0.197 0.000 *** -0.142 0.000 ***
anxiety -0.150 0.000 *** -0.142 0.000 *** -0.205 0.000 *** -0.124 0.000 ***
depression -0.220 0.000 *** -0.213 0.000 *** -0.331 0.000 *** -0.173 0.000 ***
volatility -0.164 0.000 *** -0.168 0.000 *** -0.198 0.000 *** -0.175 0.000 ***
curiosity -0.134 0.000 *** -0.100 0.000 *** -0.121 0.000 *** -0.103 0.000 ***
aesthetic -0.033 0.196 -0.061 0.015 * -0.048 0.056 -0.061 0.015 *
imagination -0.153 0.000 *** -0.133 0.000 *** -0.160 0.000 *** -0.118 0.000 ***

Almost all effects significant at the p < .001 level when we include all time points at once. Somewhat stronger effects for neuroticism and extraversion.


6.2 H2: Well-being - latent change (H5 in paper)

Both intervention groups (but not the control group between T1 and T2) will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using latent change models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.2.1 Intervention effects (changes from T1 to T2)

6.2.1.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
swls_t1 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 19 13061.93 13147.66 0.977 0.065 0.03
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.984 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.653 NA NA
d_swls_1 ~1 0.271 0.207 0.335 0.413 8.324 0
swls_t1 ~1 2.685 2.598 2.772 2.716 60.416 0
d_swls_1 ~~ d_swls_1 0.431 0.330 0.532 1.000 8.360 0
swls_t1 ~~ d_swls_1 -0.199 -0.271 -0.127 -0.307 -5.440 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.271, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_swls_hyp2_cg <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 19 3244.162 3304.293 0.978 0.071 0.037
# parameters of interest
params_lcs_swls_hyp2_cg <- broom::tidy(fit_mi_lcs_swls_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.979 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.481 NA NA
d_swls_1 ~1 0.251 0.136 0.365 0.467 4.276 0.000
swls_t1 ~1 2.634 2.455 2.812 2.412 28.873 0.000
d_swls_1 ~~ d_swls_1 0.287 0.125 0.450 1.000 3.472 0.001
swls_t1 ~~ d_swls_1 -0.117 -0.254 0.020 -0.200 -1.680 0.093

Life satisfaction changes in the control group significantly at positively (at p < .001), b = 0.251, p = 0. Slightly weaker effect size than in intervention group.

6.2.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
meaning_t1 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 9545.085 9612.761 0.992 0.055 0.025
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 1.017 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.698 NA NA
d_meaning_1 ~1 0.212 0.149 0.274 0.317 6.646 0
meaning_t1 ~1 3.209 3.123 3.294 3.292 73.486 0
d_meaning_1 ~~ d_meaning_1 0.447 0.339 0.555 1.000 8.137 0
meaning_t1 ~~ d_meaning_1 -0.239 -0.313 -0.166 -0.368 -6.346 0

Participants improved significantly in meaning in life across time, b = 0.212, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_meaning_hyp2_cg <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 2481.44 2528.912 1 0 0.033
# parameters of interest
params_lcs_meaning_hyp2_cg <- broom::tidy(fit_mi_lcs_meaning_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances
kable(params_lcs_meaning_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.990 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.662 NA NA
d_meaning_1 ~1 0.292 0.161 0.422 0.413 4.390 0.000
meaning_t1 ~1 3.190 3.008 3.373 3.021 34.294 0.000
d_meaning_1 ~~ d_meaning_1 0.498 0.317 0.680 1.000 5.378 0.000
meaning_t1 ~~ d_meaning_1 -0.238 -0.403 -0.073 -0.319 -2.832 0.005

Meaning increases significantly in the control group, b = 0.292, p = 0, with an even stronger effect size than in the intervention groups.

6.2.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
selfes_t1 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7206.632 7274.308 1 0 0.016
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 1.037 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.670 NA NA
d_selfes_1 ~1 0.263 0.218 0.308 0.546 11.497 0
selfes_t1 ~1 3.540 3.476 3.604 4.745 108.567 0
d_selfes_1 ~~ d_selfes_1 0.233 0.183 0.283 1.000 9.126 0
selfes_t1 ~~ d_selfes_1 -0.136 -0.172 -0.099 -0.377 -7.278 0

Participants increased significantly in self-esteem between the two assessments, b = 0.263, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_selfes_hyp2_cg <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1724.661 1772.133 1 0 0.02
# parameters of interest
params_lcs_selfes_hyp2_cg <- broom::tidy(fit_mi_lcs_selfes_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances
kable(params_lcs_selfes_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 0.989 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.395 NA NA
d_selfes_1 ~1 0.187 0.122 0.253 0.587 5.606 0.000
selfes_t1 ~1 3.545 3.414 3.675 4.443 53.386 0.000
d_selfes_1 ~~ d_selfes_1 0.102 0.057 0.146 1.000 4.465 0.000
selfes_t1 ~~ d_selfes_1 -0.043 -0.089 0.002 -0.171 -1.888 0.059

Self-esteem changes significantly and positively in the control group, b = 0.187, p = 0. Comparable effect size to the intervention groups.

6.2.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
concept_t1 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7401.241 7468.917 0.996 0.036 0.019
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 1.021 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.754 NA NA
d_concept_1 ~1 0.177 0.131 0.223 0.355 7.585 0
concept_t1 ~1 3.044 2.983 3.104 4.502 98.796 0
d_concept_1 ~~ d_concept_1 0.249 0.196 0.302 1.000 9.196 0
concept_t1 ~~ d_concept_1 -0.134 -0.170 -0.099 -0.397 -7.416 0

Self concept clarity improved significantly across time, b = 0.177, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_concept_hyp2_cg <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1805.904 1853.376 0.991 0.065 0.026
# parameters of interest
params_lcs_concept_hyp2_cg <- broom::tidy(fit_mi_lcs_concept_hyp2_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances
kable(params_lcs_concept_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.971 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.611 NA NA
d_concept_1 ~1 0.057 -0.028 0.143 0.118 1.317 0.188
concept_t1 ~1 3.122 2.992 3.251 4.056 47.175 0.000
d_concept_1 ~~ d_concept_1 0.235 0.096 0.373 1.000 3.324 0.001
concept_t1 ~~ d_concept_1 -0.099 -0.172 -0.027 -0.266 -2.676 0.007

Self concept clarity changes in the control group not significant, b = 0.057, p = 0.188. Still a slight positive estimate, but weaker effect size than in intervention group.

6.2.2 Follow-up effects (changes from T2 to T3)

6.2.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2_fu <- '
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 
swls_t3 =~ 1*sw06_01_t3 + lamb2*sw06_02_t3 + lamb3*sw06_03_t3 + lamb4*sw06_04_t3 # This specifies the measurement model for swls_t3 with the equality constrained factor loadings

swls_t3 ~ 1*swls_t2     # This parameter regresses swls_t3 perfectly on swls_t2
d_swls_1 =~ 1*swls_t3   # This defines the latent change score factor as measured perfectly by scores on swls_t3
swls_t3 ~ 0*1           # This line constrains the intercept of swls_t3 to 0
swls_t3 ~~ 0*swls_t3    # This fixes the variance of swls_t3 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t2 ~ 1            # This estimates the intercept of swls_t2 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t2 ~~ swls_t2     # This estimates the variance of the swls_t2 
swls_t2 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t2 ~~ sw06_01_t3   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t2 ~~ sw06_02_t3   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t2 ~~ sw06_03_t3   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t2 ~~ sw06_04_t3   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t2 ~~ res1*sw06_01_t2   # This allows residual variance on indicator X1 at T1 
sw06_02_t2 ~~ res2*sw06_02_t2   # This allows residual variance on indicator X2 at T1
sw06_03_t2 ~~ res3*sw06_03_t2   # This allows residual variance on indicator X3 at T1
sw06_04_t2 ~~ res4*sw06_04_t2   # This allows residual variance on indicator X4 at T1

sw06_01_t3 ~~ res1*sw06_01_t3  # This allows residual variance on indicator X1 at T2 
sw06_02_t3 ~~ res2*sw06_02_t3  # This allows residual variance on indicator X2 at T2 
sw06_03_t3 ~~ res3*sw06_03_t3  # This allows residual variance on indicator X3 at T2
sw06_04_t3 ~~ res4*sw06_04_t3  # This allows residual variance on indicator X4 at T2

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t3 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t3 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t3 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2_fu <- lavaan(mi_lcs_swls_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 19 10808.9 10891.76 0.985 0.058 0.022
# parameters of interest
params_lcs_swls_hyp2_fu <- broom::tidy(fit_mi_lcs_swls_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t3 ~ swls_t2", "d_swls_1 =~ swls_t3", "swls_t2 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t2 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t3 ~ swls_t2 1.000 1.000 1.000 0.994 NA NA
d_swls_1 =~ swls_t3 1.000 1.000 1.000 0.532 NA NA
d_swls_1 ~1 0.110 0.051 0.169 0.202 3.657 0
swls_t2 ~1 2.966 2.874 3.059 2.926 63.139 0
d_swls_1 ~~ d_swls_1 0.294 0.184 0.405 1.000 5.227 0
swls_t2 ~~ d_swls_1 -0.141 -0.211 -0.071 -0.256 -3.966 0

Life satisfaction further increased from T2 to the T3 follow up, b = 0.11, p = 0.

6.2.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2_fu <- '
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 
meaning_t3 =~ 1*meaning_par1_t3 + lamb2*meaning_par2_t3 + lamb3*meaning_par3_t3 # This specifies the measurement model for meaning_t3 with the equality constrained factor loadings

meaning_t3 ~ 1*meaning_t2     # This parameter regresses meaning_t3 perfectly on meaning_t2
d_meaning_1 =~ 1*meaning_t3   # This defines the latent change score factor as measured perfectly by scores on meaning_t3
meaning_t3 ~ 0*1              # This line constrains the intercept of meaning_t3 to 0
meaning_t3 ~~ 0*meaning_t3    # This fixes the variance of meaning_t3 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t2 ~ 1               # This estimates the intercept of meaning_t2 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t2 ~~ meaning_t2     # This estimates the variance of the meaning_t2 
meaning_t2 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t2 ~~ meaning_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t2 ~~ meaning_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t2 ~~ meaning_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t2 ~~ res1*meaning_par1_t2   # This allows residual variance on indicator X1 at T1 
meaning_par2_t2 ~~ res2*meaning_par2_t2   # This allows residual variance on indicator X2 at T1
meaning_par3_t2 ~~ res3*meaning_par3_t2   # This allows residual variance on indicator X3 at T1

meaning_par1_t3 ~~ res1*meaning_par1_t3  # This allows residual variance on indicator X1 at T2 
meaning_par2_t3 ~~ res2*meaning_par2_t3  # This allows residual variance on indicator X2 at T2 
meaning_par3_t3 ~~ res3*meaning_par3_t3  # This allows residual variance on indicator X3 at T2

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2_fu <- lavaan(mi_lcs_meaning_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 8150.359 8215.779 0.995 0.046 0.031
# parameters of interest
params_lcs_meaning_hyp2_fu <- broom::tidy(fit_mi_lcs_meaning_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t3 ~ meaning_t2", "d_meaning_1 =~ meaning_t3", "meaning_t2 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t2 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t3 ~ meaning_t2 1.000 1.000 1.000 0.964 NA NA
d_meaning_1 =~ meaning_t3 1.000 1.000 1.000 0.674 NA NA
d_meaning_1 ~1 0.150 0.080 0.219 0.210 4.197 0
meaning_t2 ~1 3.412 3.316 3.509 3.347 69.108 0
d_meaning_1 ~~ d_meaning_1 0.508 0.369 0.646 1.000 7.176 0
meaning_t2 ~~ d_meaning_1 -0.215 -0.297 -0.132 -0.296 -5.106 0

Meaning in life further increased from T2 to the T3 follow up, b = 0.15, p = 0.

6.2.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2_fu <- '
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 
selfes_t3 =~ 1*selfes_par1_t3 + lamb2*selfes_par2_t3 + lamb3*selfes_par3_t3 # This specifies the measurement model for selfes_t3 with the equality constrained factor loadings

selfes_t3 ~ 1*selfes_t2     # This parameter regresses selfes_t3 perfectly on selfes_t2
d_selfes_1 =~ 1*selfes_t3   # This defines the latent change score factor as measured perfectly by scores on selfes_t3
selfes_t3 ~ 0*1             # This line constrains the intercept of selfes_t3 to 0
selfes_t3 ~~ 0*selfes_t3    # This fixes the variance of selfes_t3 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t2 ~ 1              # This estimates the intercept of selfes_t2 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t2 ~~ selfes_t2     # This estimates the variance of the selfes_t2 
selfes_t2 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t2 ~~ selfes_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t2 ~~ selfes_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t2 ~~ selfes_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t2 ~~ res1*selfes_par1_t2   # This allows residual variance on indicator X1 at T1 
selfes_par2_t2 ~~ res2*selfes_par2_t2   # This allows residual variance on indicator X2 at T1
selfes_par3_t2 ~~ res3*selfes_par3_t2   # This allows residual variance on indicator X3 at T1

selfes_par1_t3 ~~ res1*selfes_par1_t3  # This allows residual variance on indicator X1 at T2 
selfes_par2_t3 ~~ res2*selfes_par2_t3  # This allows residual variance on indicator X2 at T2 
selfes_par3_t3 ~~ res3*selfes_par3_t3  # This allows residual variance on indicator X3 at T2

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2_fu <- lavaan(mi_lcs_selfes_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 5982.84 6048.26 1 0 0.015
# parameters of interest
params_lcs_selfes_hyp2_fu <- broom::tidy(fit_mi_lcs_selfes_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t3 ~ selfes_t2", "d_selfes_1 =~ selfes_t3", "selfes_t2 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t2 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t3 ~ selfes_t2 1.000 1.000 1.000 0.973 NA NA
d_selfes_1 =~ selfes_t3 1.000 1.000 1.000 0.499 NA NA
d_selfes_1 ~1 0.052 0.014 0.090 0.143 2.697 0.007
selfes_t2 ~1 3.814 3.748 3.880 5.329 113.354 0.000
d_selfes_1 ~~ d_selfes_1 0.135 0.102 0.167 1.000 8.126 0.000
selfes_t2 ~~ d_selfes_1 -0.053 -0.081 -0.025 -0.201 -3.674 0.000

Self-esteem further increased from T2 to the T3 follow up, b = 0.052, p = 0.007.

6.2.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2_fu <- '
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 
concept_t3 =~ 1*concept_par1_t3 + lamb2*concept_par2_t3 + lamb3*concept_par3_t3 # This specifies the measurement model for concept_t3 with the equality constrained factor loadings

concept_t3 ~ 1*concept_t2     # This parameter regresses concept_t3 perfectly on concept_t2
d_concept_1 =~ 1*concept_t3   # This defines the latent change score factor as measured perfectly by scores on concept_t3
concept_t3 ~ 0*1              # This line constrains the intercept of concept_t3 to 0
concept_t3 ~~ 0*concept_t3    # This fixes the variance of concept_t3 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t2 ~ 1               # This estimates the intercept of concept_t2 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t2 ~~ concept_t2     # This estimates the variance of the concept_t2 
concept_t2 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t2 ~~ concept_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t2 ~~ concept_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t2 ~~ concept_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t2 ~~ res1*concept_par1_t2   # This allows residual variance on indicator X1 at T1 
concept_par2_t2 ~~ res2*concept_par2_t2   # This allows residual variance on indicator X2 at T1
concept_par3_t2 ~~ res3*concept_par3_t2   # This allows residual variance on indicator X3 at T1

concept_par1_t3 ~~ res1*concept_par1_t3  # This allows residual variance on indicator X1 at T2 
concept_par2_t3 ~~ res2*concept_par2_t3  # This allows residual variance on indicator X2 at T2 
concept_par3_t3 ~~ res3*concept_par3_t3  # This allows residual variance on indicator X3 at T2

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2_fu <- lavaan(mi_lcs_concept_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 6175.822 6241.241 0.996 0.042 0.019
# parameters of interest
params_lcs_concept_hyp2_fu <- broom::tidy(fit_mi_lcs_concept_hyp2_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t3 ~ concept_t2", "d_concept_1 =~ concept_t3", "concept_t2 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t2 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t3 ~ concept_t2 1.000 1.000 1.000 0.969 NA NA
d_concept_1 =~ concept_t3 1.000 1.000 1.000 0.600 NA NA
d_concept_1 ~1 0.043 0.003 0.082 0.108 2.135 0.033
concept_t2 ~1 3.226 3.163 3.288 5.063 101.242 0.000
d_concept_1 ~~ d_concept_1 0.156 0.117 0.194 1.000 7.866 0.000
concept_t2 ~~ d_concept_1 -0.064 -0.091 -0.038 -0.257 -4.729 0.000

Self concept clarity further increased from T2 to the T3 follow up, b = 0.043, p = 0.033.

I also checked whether there are differences if I model the two intervention groups (self-improvement / self-acceptance) separately. Changes are more or less the same across the two groups.


6.3 H3: Distance between ideal- and current-self over time (H1 in paper)

The distance between ideal- and current-self will decrease in both intervention groups (but not in the control group between T1 and T2).

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal-self and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal-self rating for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using mixed-effects models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa2_wide_profdiff <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, rando, time))
6.3.1.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
W = 0.93322, p-value = 2.657e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
D = 0.078375, p-value = 6.384e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 671 0.42 0.49   0.38    0.39 0.47 -1.09 3.39  4.48 0.81     2.34 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
W = 0.93724, p-value = 8.082e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
D = 0.080938, p-value = 1.393e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 672 0.35 0.66   0.29    0.31 0.64 -1.23 3.77     5 0.69     1.04 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.131 8.684 0 571 0.101 0.160 Paired t-test two.sided
Facet-level profile corr. 0.169 8.395 0 573 0.129 0.208 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.1668914 0.2788659 0.3907299
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet$cohen.d
                         lower    effect     upper
profile_corr_facet_z 0.1475916 0.2593992 0.3711035

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

What happens in the waitlist control group during this time?

t_profile_corr_item_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_cg), tidy(t_profile_corr_facet_cg)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 5)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.10158 3.36943 0.00097 145 0.0420 0.16117 Paired t-test two.sided
Facet-level profile corr. 0.12900 3.24385 0.00146 145 0.0504 0.20760 Paired t-test two.sided
# effect sizes
d_profile_corr_item_cg <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item_cg$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.02087351 0.1993958 0.4193518
d_profile_corr_facet_cg <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet_cg$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.04429333 0.1758341 0.3956873

Slightly higher higher profile correlations at the second measurement occasion also in the controlg group, although this is only significant at .001 for the item-level profile correlation but not for the facet-level profile correlations.

6.3.1.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
W = 0.91279, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
D = 0.062819, p-value = 5.247e-05
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 514 0.61 0.55   0.57    0.59 0.55 -1.22 3.34  4.56 0.48      1.4 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
W = 0.92574, p-value = 3.207e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
D = 0.067574, p-value = 7.904e-06
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3))
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 514 0.59 0.72   0.54    0.56 0.71 -1.7 3.72  5.42 0.47     0.54 0.03

Results summary:

t_profile_corr_item_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3), 
                                 df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2), 
                                 paired = TRUE)
t_profile_corr_facet_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3), 
                                  df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                                  paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_fu), tidy(t_profile_corr_facet_fu)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.040 2.583 0.010 511 0.010 0.071 Paired t-test two.sided
Facet-level profile corr. 0.066 3.097 0.002 511 0.024 0.108 Paired t-test two.sided
# effect sizes
d_profile_corr_item_fu <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                           filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_item_fu$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.01900003 0.1000698 0.2190937
d_profile_corr_facet_fu <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                            filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_facet_fu$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.01257597 0.1064569 0.2254401

Profile correlations stay stable from the second measurement occasion to the third when evaluated at alpha=.001, both for the item-level profile correlations and the facet-level profile correlations. Slight increase if looking at effect sizes.

6.3.1.3 Summary plot
profile_df_plot <- df_sbsa2 %>% 
  select(pid, time, rando, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time, rando), names_to = "itemfacet", values_to = "corr") %>% 
  filter(!is.na(corr)) %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

cowplot::plot_grid(
  ggplot(profile_df_plot %>% filter(rando!="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Intervention groups") + 
  theme_bw(),
  ggplot(profile_df_plot %>% filter(rando=="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Waitlist control group") + 
  theme_bw(),
  ncol = 1, align = "vt"
)

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations. Further increases (but only slightly) at the T3 follow-up. However, we also see a pattern of increases in the waitlist control group although with higher uncertainty of estimates (smaller sample). We would not have expected that from T1 to T2, but only from T2 to T3.

6.3.2 Individual traits: squared differences

6.3.2.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t1)
W = 0.90382, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t1)
D = 0.12962, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 674 1.84 1.98   1.17     1.5 1.48   0 11.67 11.67 1.57     2.63 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t1)
W = 0.75936, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t1)
D = 0.16923, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673  0.5 0.81   0.17    0.33 0.25   0 7.56  7.56 3.64    20.07 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t1)
W = 0.87992, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t1)
D = 0.12582, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674  1.7 2.03      1    1.31 1.32   0  16    16 2.08      6.1 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
W = 0.88583, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
D = 0.14624, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674 3.36 3.44   2.25    2.79 2.68   0  16    16 1.34     1.27 0.13
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t1)
W = 0.63533, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t1)
D = 0.19368, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673 0.47 0.92   0.11    0.27 0.16   0 9.51  9.51 4.59    29.24 0.04
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03

Results summary:

mod_traits_sqdiff <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.372 -6.354 0.000 576 -0.487 -0.257 Paired t-test two.sided
agreeableness -0.097 -3.536 0.000 575 -0.151 -0.043 Paired t-test two.sided
conscientiousness -0.169 -2.890 0.004 576 -0.284 -0.054 Paired t-test two.sided
neuroticism -0.697 -6.865 0.000 576 -0.896 -0.498 Paired t-test two.sided
openness -0.076 -2.587 0.010 574 -0.134 -0.018 Paired t-test two.sided
sociability -0.782 -7.573 0.000 574 -0.985 -0.579 Paired t-test two.sided
assertiveness -0.239 -3.030 0.003 573 -0.394 -0.084 Paired t-test two.sided
energy -0.337 -3.541 0.000 575 -0.523 -0.150 Paired t-test two.sided
compassion -0.118 -2.769 0.006 575 -0.201 -0.034 Paired t-test two.sided
respectfulness -0.012 -0.321 0.749 572 -0.086 0.062 Paired t-test two.sided
trust -0.329 -4.856 0.000 574 -0.462 -0.196 Paired t-test two.sided
organization -0.149 -1.777 0.076 575 -0.314 0.016 Paired t-test two.sided
productiveness -0.453 -4.519 0.000 572 -0.650 -0.256 Paired t-test two.sided
responsibility -0.139 -2.065 0.039 573 -0.271 -0.007 Paired t-test two.sided
anxiety -0.681 -4.592 0.000 576 -0.972 -0.389 Paired t-test two.sided
depression -0.887 -7.570 0.000 574 -1.117 -0.657 Paired t-test two.sided
volatility -0.603 -4.782 0.000 576 -0.851 -0.355 Paired t-test two.sided
curiosity -0.044 -1.039 0.299 573 -0.128 0.040 Paired t-test two.sided
aesthetic -0.053 -1.359 0.175 572 -0.130 0.024 Paired t-test two.sided
imagination -0.215 -3.559 0.000 574 -0.334 -0.097 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.310 -0.199 -0.088
agreeableness -0.247 -0.135 -0.024
conscientiousness -0.235 -0.124 -0.013
neuroticism -0.328 -0.217 -0.105
openness -0.212 -0.101 0.010
sociability -0.345 -0.233 -0.122
assertiveness -0.219 -0.108 0.003
energy -0.268 -0.157 -0.045
compassion -0.231 -0.120 -0.008
respectfulness -0.173 -0.062 0.050
trust -0.303 -0.191 -0.080
organization -0.202 -0.091 0.020
productiveness -0.286 -0.174 -0.063
responsibility -0.223 -0.112 0.000
anxiety -0.272 -0.160 -0.049
depression -0.351 -0.240 -0.128
volatility -0.283 -0.172 -0.060
curiosity -0.161 -0.049 0.062
aesthetic -0.178 -0.066 0.045
imagination -0.235 -0.124 -0.012

Significantly lower squared mean-level differences at the second measurement occasion for extraversion, agreeableness, and neuroticism (at .001). For conscientiousness and openness only at p < .01. On the level of the 15 BFI-2 facets, we find 8 significant effects (at .001) where squared mean-level differences were reduced. For example, pronounced effect for energy but no effect for assertiveness.

What happens in the waitlist control group during this time?

mod_traits_sqdiff_cg <- df_sbsa2_wide_profdiff %>% 
  filter(rando=="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_cg <- mod_traits_sqdiff_cg[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_cg)) {
  mod_traits_unlist_cg <- bind_rows(mod_traits_unlist_cg, mod_traits_sqdiff_cg[[i]] %>% tidy())
}

kable(mod_traits_unlist_cg %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.371 -2.622 0.010 145 -0.650 -0.091 Paired t-test two.sided
agreeableness -0.158 -2.381 0.019 145 -0.290 -0.027 Paired t-test two.sided
conscientiousness -0.347 -3.151 0.002 145 -0.565 -0.130 Paired t-test two.sided
neuroticism -0.600 -3.067 0.003 145 -0.986 -0.213 Paired t-test two.sided
openness -0.052 -1.042 0.299 145 -0.151 0.047 Paired t-test two.sided
sociability -0.451 -2.337 0.021 145 -0.833 -0.070 Paired t-test two.sided
assertiveness -0.375 -1.927 0.056 145 -0.759 0.010 Paired t-test two.sided
energy -0.495 -2.212 0.029 145 -0.937 -0.053 Paired t-test two.sided
compassion -0.268 -2.470 0.015 145 -0.482 -0.053 Paired t-test two.sided
respectfulness -0.092 -1.222 0.224 145 -0.242 0.057 Paired t-test two.sided
trust -0.213 -1.634 0.104 145 -0.470 0.045 Paired t-test two.sided
organization -0.556 -3.541 0.001 145 -0.867 -0.246 Paired t-test two.sided
productiveness -0.544 -3.182 0.002 145 -0.882 -0.206 Paired t-test two.sided
responsibility -0.304 -2.500 0.014 145 -0.545 -0.064 Paired t-test two.sided
anxiety -0.625 -2.144 0.034 145 -1.200 -0.049 Paired t-test two.sided
depression -0.745 -3.091 0.002 145 -1.222 -0.269 Paired t-test two.sided
volatility -0.596 -2.357 0.020 145 -1.095 -0.096 Paired t-test two.sided
curiosity -0.068 -1.089 0.278 145 -0.190 0.055 Paired t-test two.sided
aesthetic -0.036 -0.363 0.717 145 -0.232 0.160 Paired t-test two.sided
imagination -0.074 -0.569 0.570 145 -0.329 0.182 Paired t-test two.sided
# effect sizes
d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist_cg <- as_tibble(d_trait_cg$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist_cg <- bind_rows(d_traits_unlist_cg, as_tibble(d_trait_cg$cohen.d))
}
kable(d_traits_unlist_cg %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.415 -0.195 0.025
agreeableness -0.410 -0.190 0.030
conscientiousness -0.434 -0.214 0.007
neuroticism -0.380 -0.160 0.060
openness -0.310 -0.090 0.130
sociability -0.388 -0.169 0.051
assertiveness -0.366 -0.146 0.074
energy -0.410 -0.191 0.030
compassion -0.480 -0.260 -0.039
respectfulness -0.337 -0.118 0.102
trust -0.296 -0.076 0.143
organization -0.436 -0.216 0.004
productiveness -0.405 -0.185 0.035
responsibility -0.426 -0.206 0.014
anxiety -0.355 -0.135 0.085
depression -0.386 -0.166 0.054
volatility -0.354 -0.134 0.086
curiosity -0.322 -0.102 0.118
aesthetic -0.298 -0.079 0.141
imagination -0.261 -0.042 0.178

In the control group, significantly lower squared mean-level differences at the second measurement occasion only for facet organization (at .001). For extraversion, agreeableness, conscientiousness, and neuroticism only at p < .05 (as well as for 8 facets). However, in terms of effect sizes, relatively similar effects to intervention group.

6.3.2.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2)
W = 0.91718, p-value = 3.875e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t2)
D = 0.12883, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 1.37 1.65   0.69    1.06 0.94   0   9     9 1.84     3.81 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2)
W = 0.70258, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t2)
D = 0.17613, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 0.36 0.68   0.11    0.23 0.16   0   9     9 6.09    59.52 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2)
W = 0.81404, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t2)
D = 0.15513, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 1.35 1.81   0.69    0.98 0.96   0 11.67 11.67 2.39        7 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
W = 0.9264, p-value = 3.804e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
D = 0.13798, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3))
   vars   n mean   sd median trimmed mad min max range skew kurtosis   se
X1    1 514 2.44 2.76   1.36    1.95 1.7   0  16    16 1.83     4.04 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2)
W = 0.7161, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t2)
D = 0.19517, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3))
   vars   n mean  sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 0.42 0.9   0.11    0.23 0.16   0 11.67 11.67 6.54    62.09 0.04

Results summary:

mod_traits_sqdiff_fu <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t1")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t2|t3)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t3"), # need to relevel this to get T3-T2 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_fu <- mod_traits_sqdiff_fu[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_fu)) {
  mod_traits_unlist_fu <- bind_rows(mod_traits_unlist_fu, mod_traits_sqdiff_fu[[i]] %>% tidy())
}

kable(mod_traits_unlist_fu %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.096 -1.820 0.069 511 -0.199 0.008 Paired t-test two.sided
agreeableness -0.007 -0.304 0.761 511 -0.053 0.038 Paired t-test two.sided
conscientiousness -0.086 -1.451 0.147 511 -0.203 0.031 Paired t-test two.sided
neuroticism -0.205 -2.573 0.010 511 -0.362 -0.049 Paired t-test two.sided
openness 0.030 1.064 0.288 511 -0.025 0.085 Paired t-test two.sided
sociability -0.138 -1.437 0.151 511 -0.326 0.050 Paired t-test two.sided
assertiveness -0.121 -1.553 0.121 511 -0.273 0.032 Paired t-test two.sided
energy -0.001 -0.007 0.995 511 -0.176 0.174 Paired t-test two.sided
compassion 0.003 0.083 0.934 511 -0.072 0.078 Paired t-test two.sided
respectfulness -0.032 -0.937 0.349 511 -0.098 0.035 Paired t-test two.sided
trust 0.005 0.097 0.923 511 -0.101 0.112 Paired t-test two.sided
organization -0.095 -1.083 0.279 511 -0.266 0.077 Paired t-test two.sided
productiveness -0.139 -1.506 0.133 511 -0.321 0.043 Paired t-test two.sided
responsibility -0.057 -0.838 0.403 511 -0.190 0.077 Paired t-test two.sided
anxiety -0.380 -2.893 0.004 511 -0.638 -0.122 Paired t-test two.sided
depression -0.130 -1.138 0.256 511 -0.356 0.095 Paired t-test two.sided
volatility -0.163 -1.670 0.095 511 -0.355 0.029 Paired t-test two.sided
curiosity 0.040 0.904 0.366 511 -0.047 0.127 Paired t-test two.sided
aesthetic 0.083 1.791 0.074 511 -0.008 0.175 Paired t-test two.sided
imagination -0.101 -1.670 0.096 511 -0.220 0.018 Paired t-test two.sided
# effect sizes
d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_traits_unlist_fu <- as_tibble(d_trait_fu$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
  d_traits_unlist_fu <- bind_rows(d_traits_unlist_fu, as_tibble(d_trait_fu$cohen.d))
}
kable(d_traits_unlist_fu %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.179 -0.060 0.059
agreeableness -0.155 -0.037 0.082
conscientiousness -0.178 -0.059 0.060
neuroticism -0.194 -0.075 0.044
openness -0.086 0.033 0.152
sociability -0.163 -0.044 0.075
assertiveness -0.199 -0.080 0.039
energy -0.119 0.000 0.119
compassion -0.149 -0.030 0.089
respectfulness -0.185 -0.066 0.053
trust -0.116 0.002 0.121
organization -0.173 -0.054 0.065
productiveness -0.175 -0.056 0.063
responsibility -0.156 -0.037 0.082
anxiety -0.217 -0.098 0.021
depression -0.154 -0.035 0.084
volatility -0.180 -0.061 0.058
curiosity -0.107 0.012 0.131
aesthetic -0.043 0.076 0.195
imagination -0.186 -0.067 0.052

No significant further changes in the squared difference from the second to the third measurement occasion (at .001). For neuroticism (and anxiety) further decreases only at p < .01.

6.3.2.3 Summary plot

Traits/facets sorted by average size of squared differences - in the intervention groups from T1 to T2

sqdiff_df_plot <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.

Traits/facets sorted by average size of squared differences - in the control group from T1 to T2

sqdiff_df_plot_cg <- df_sbsa2 %>% 
  filter(rando=="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_cg <- ggplot(sqdiff_df_plot_cg) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

Smaller changes but also quite substantial for some traits/facets (although not significant).

Traits/facets sorted by average size of squared differences - in the intervention groups from T2 to T3

sqdiff_df_plot_fu <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_fu <- ggplot(sqdiff_df_plot_fu) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

No substantial changes over time.


6.4 H4: Change goals and change in personality (current / ideal) in self-improvement group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H6 in prereg / H2 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-improvement group, there will be a correlation between change goals and change in current-self ratings but not change in ideal-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb <- df_sbsa2_wide_pers_sb %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb)

# follow-up, from T2 to T3 (for later models)
df_sbsa2_wide_pers_sb_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_fu <- df_sbsa2_wide_pers_sb_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_fu)

df_sbsa2_wide_pers_sb_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_fu)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4605.81 4674.625 0.938 0.109 0.107
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.097 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.541 NA NA
d_extra_1 ~1 0.093 0.039 0.148 0.321 3.378 0.001
extra_t1 ~1 2.989 2.903 3.075 5.066 68.090 0.000
d_extra_1 ~~ d_extra_1 0.085 0.042 0.128 1.000 3.859 0.000
extra_t1 ~~ d_extra_1 -0.072 -0.110 -0.033 -0.417 -3.651 0.000
d_extra_1 ~~ sb06_01_t1 -0.026 -0.071 0.020 -0.088 -1.090 0.276
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

The correlation of the general change goal with the extraversion change score (current-self) is not significantly different from zero, r = -0.088, p = 0.276.

6.4.1.2 Extraversion - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4107.397 4176.212 0.993 0.025 0.045
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.063 0.024 -0.081 -0.877 0.380
extra_t1 ~1 3.682 3.615 3.749 9.893 107.796 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.092 1.000 3.271 0.001
extra_t1 ~~ d_extra_1 -0.025 -0.051 0.001 -0.283 -1.905 0.057
d_extra_1 ~~ sb06_01_t1 0.002 -0.042 0.047 0.009 0.094 0.925
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.009, p = 0.925.

6.4.1.3 Extraversion - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6479.07 6574.646 0.877 0.124 0.144
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.120 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.570 NA NA
d_extra_1 ~1 0.091 0.038 0.145 0.307 3.334 0.001
extra_t1 ~1 2.990 2.904 3.076 5.110 68.086 0.000
d_extra_1 ~~ d_extra_1 0.089 0.044 0.133 1.000 3.884 0.000
extra_t1 ~~ d_extra_1 -0.079 -0.120 -0.038 -0.454 -3.755 0.000
goals ~~ d_extra_1 -0.036 -0.092 0.020 -0.235 -1.264 0.206
goals ~~ goals 0.269 0.006 0.532 1.000 2.008 0.045

Correlation of specific, facet-level change goals with extraversion change score (current-self) is not significantly different from zero, r = -0.235, p = 0.206.

6.4.1.4 Extraversion - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5982.528 6078.104 0.995 0.018 0.034
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.977 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.631 NA NA
d_extra_1 ~1 -0.019 -0.062 0.024 -0.080 -0.872 0.383
extra_t1 ~1 3.682 3.615 3.749 9.909 107.814 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.092 1.000 3.301 0.001
extra_t1 ~~ d_extra_1 -0.026 -0.051 0.000 -0.286 -1.952 0.051
goals ~~ d_extra_1 0.012 -0.017 0.042 0.113 0.812 0.417
goals ~~ goals 0.205 -0.001 0.411 1.000 1.953 0.051

Correlation of specific, facet-level change goals with extraversion change score (ideal-self) is not significantly different from zero, r = 0.113, p = 0.417.

6.4.1.5 Agreeableness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3940.804 4009.619 0.999 0.011 0.05
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.070 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.530 NA NA
d_agree_1 ~1 0.020 -0.016 0.055 0.097 1.074 0.283
agree_t1 ~1 3.463 3.395 3.531 8.480 99.783 0.000
d_agree_1 ~~ d_agree_1 0.041 0.015 0.067 1.000 3.121 0.002
agree_t1 ~~ d_agree_1 -0.031 -0.054 -0.008 -0.376 -2.678 0.007
d_agree_1 ~~ sb06_01_t1 0.022 -0.009 0.054 0.110 1.383 0.167
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with agreeableness change score (current-self) is not significantly different from zero, r = 0.11, p = 0.167.

6.4.1.6 Agreeableness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3945.079 4013.894 0.992 0.031 0.029
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.054 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA
d_agree_1 ~1 -0.030 -0.074 0.014 -0.112 -1.354 0.176
agree_t1 ~1 3.769 3.700 3.839 8.516 106.115 0.000
d_agree_1 ~~ d_agree_1 0.074 0.041 0.107 1.000 4.357 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.072 -0.022 -0.388 -3.640 0.000
d_agree_1 ~~ sb06_01_t1 0.009 -0.030 0.047 0.032 0.438 0.662
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with agreeableness change score (ideal-self) is not significantly different from zero, r = 0.032, p = 0.662.

6.4.1.7 Agreeableness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5651.088 5746.664 0.976 0.048 0.082
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.083 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.549 NA NA
d_agree_1 ~1 0.020 -0.015 0.056 0.099 1.120 0.263
agree_t1 ~1 3.463 3.395 3.531 8.462 99.734 0.000
d_agree_1 ~~ d_agree_1 0.043 0.017 0.069 1.000 3.217 0.001
agree_t1 ~~ d_agree_1 -0.034 -0.058 -0.010 -0.399 -2.795 0.005
goals ~~ d_agree_1 -0.010 -0.038 0.017 -0.072 -0.728 0.467
goals ~~ goals 0.466 0.306 0.626 1.000 5.722 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current-self) is not significantly different from zero, r = -0.072, p = 0.467.

6.4.1.8 Agreeableness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5654.243 5749.819 0.977 0.048 0.058
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA
d_agree_1 ~1 -0.030 -0.074 0.014 -0.111 -1.347 0.178
agree_t1 ~1 3.769 3.700 3.839 8.518 106.129 0.000
d_agree_1 ~~ d_agree_1 0.074 0.040 0.107 1.000 4.338 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.072 -0.022 -0.389 -3.642 0.000
goals ~~ d_agree_1 -0.003 -0.038 0.032 -0.014 -0.150 0.880
goals ~~ goals 0.469 0.309 0.629 1.000 5.738 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.014, p = 0.88.

6.4.1.9 Conscientiousness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4201.939 4270.754 0.993 0.043 0.059
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.991 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.529 NA NA
d_consc_1 ~1 0.103 0.047 0.160 0.251 3.574 0.000
consc_t1 ~1 3.378 3.287 3.469 4.396 72.808 0.000
d_consc_1 ~~ d_consc_1 0.168 0.078 0.258 1.000 3.673 0.000
consc_t1 ~~ d_consc_1 -0.079 -0.139 -0.019 -0.250 -2.569 0.010
d_consc_1 ~~ sb06_01_t1 0.022 -0.047 0.091 0.053 0.619 0.536
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with conscientiousness change score (current-self) is not significantly different from zero, r = 0.053, p = 0.536.

6.4.1.10 Conscientiousness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3564.246 3633.06 0.989 0.038 0.043
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.625 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.034 0.411 0.681
consc_t1 ~1 4.319 4.257 4.382 10.868 135.542 0.000
d_consc_1 ~~ d_consc_1 0.070 0.040 0.100 1.000 4.626 0.000
consc_t1 ~~ d_consc_1 -0.024 -0.051 0.002 -0.229 -1.781 0.075
d_consc_1 ~~ sb06_01_t1 0.011 -0.030 0.052 0.043 0.538 0.590
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.043, p = 0.59.

6.4.1.11 Conscientiousness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5753.613 5849.189 0.918 0.133 0.239
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.052 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.596 NA NA
d_consc_1 ~1 0.106 0.049 0.162 0.242 3.664 0.000
consc_t1 ~1 3.378 3.287 3.469 4.392 72.805 0.000
d_consc_1 ~~ d_consc_1 0.190 0.087 0.293 1.000 3.605 0.000
consc_t1 ~~ d_consc_1 -0.123 -0.196 -0.051 -0.368 -3.339 0.001
goals ~~ d_consc_1 -0.073 -0.133 -0.012 -0.213 -2.365 0.018
goals ~~ goals 0.608 0.469 0.748 1.000 8.555 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current-self) is significantly different from zero, r = -0.213, p = 0.018.

6.4.1.12 Conscientiousness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5119.945 5215.522 0.999 0.008 0.031
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.934 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.620 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.035 0.423 0.672
consc_t1 ~1 4.319 4.257 4.382 10.815 135.500 0.000
d_consc_1 ~~ d_consc_1 0.070 0.040 0.100 1.000 4.622 0.000
consc_t1 ~~ d_consc_1 -0.023 -0.050 0.003 -0.222 -1.717 0.086
goals ~~ d_consc_1 -0.023 -0.060 0.013 -0.113 -1.255 0.209
goals ~~ goals 0.606 0.466 0.747 1.000 8.452 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal-self) is not significantly different from zero, r = -0.113, p = 0.209.

6.4.1.13 Neuroticism - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4438.624 4507.439 0.969 0.094 0.13
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.069 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA
d_neuro_1 ~1 -0.180 -0.243 -0.117 -0.391 -5.623 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.898 66.630 0.000
d_neuro_1 ~~ d_neuro_1 0.212 0.154 0.270 1.000 7.157 0.000
neuro_t1 ~~ d_neuro_1 -0.150 -0.214 -0.086 -0.388 -4.578 0.000
d_neuro_1 ~~ sb06_01_t1 -0.004 -0.072 0.063 -0.009 -0.123 0.902
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.009, p = 0.902.

6.4.1.14 Neuroticism - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3576.873 3645.688 1 0.007 0.039
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.949 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.765 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.115 1.550 0.121
neuro_t1 ~1 1.707 1.648 1.766 3.747 56.782 0.000
d_neuro_1 ~~ d_neuro_1 0.135 0.079 0.191 1.000 4.697 0.000
neuro_t1 ~~ d_neuro_1 -0.056 -0.099 -0.013 -0.334 -2.542 0.011
d_neuro_1 ~~ sb06_01_t1 -0.045 -0.098 0.008 -0.122 -1.665 0.096
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.122, p = 0.096.

6.4.1.15 Neuroticism - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6034.297 6129.873 0.911 0.138 0.242
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.152 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.690 NA NA
d_neuro_1 ~1 -0.178 -0.241 -0.115 -0.355 -5.556 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.903 66.640 0.000
d_neuro_1 ~~ d_neuro_1 0.253 0.174 0.332 1.000 6.252 0.000
neuro_t1 ~~ d_neuro_1 -0.213 -0.287 -0.139 -0.505 -5.624 0.000
goals ~~ d_neuro_1 0.089 0.032 0.147 0.248 3.053 0.002
goals ~~ goals 0.516 0.369 0.662 1.000 6.896 0.000

The correlation of specific, facet-level change goals with neuroticism change score (current-self) is significantly different from zero, r = 0.248, p = 0.002.

6.4.1.16 Neuroticism - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5184.686 5280.262 0.995 0.023 0.048
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.749 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.116 1.546 0.122
neuro_t1 ~1 1.707 1.648 1.766 3.746 56.787 0.000
d_neuro_1 ~~ d_neuro_1 0.132 0.078 0.186 1.000 4.775 0.000
neuro_t1 ~~ d_neuro_1 -0.052 -0.094 -0.010 -0.314 -2.442 0.015
goals ~~ d_neuro_1 0.018 -0.024 0.060 0.068 0.847 0.397
goals ~~ goals 0.538 0.392 0.683 1.000 7.233 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal-self) is not significantly different from zero, r = 0.068, p = 0.397.

6.4.1.17 Openness - current-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4155.418 4224.233 0.991 0.04 0.039
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.999 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.457 NA NA
d_openn_1 ~1 0.078 0.030 0.125 0.293 3.200 0.001
openn_t1 ~1 3.485 3.410 3.561 6.002 90.551 0.000
d_openn_1 ~~ d_openn_1 0.071 0.037 0.104 1.000 4.159 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.068 -0.001 -0.226 -2.028 0.043
d_openn_1 ~~ sb06_01_t1 -0.016 -0.060 0.029 -0.059 -0.692 0.489
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with openness change score (current-self) is not significantly different from zero, r = -0.059, p = 0.489.

6.4.1.18 Openness - ideal-self: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4014.73 4083.545 0.985 0.042 0.039
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.108 1.118 0.264
openn_t1 ~1 3.917 3.856 3.979 13.318 125.051 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.874 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.303 -1.907 0.056
d_openn_1 ~~ sb06_01_t1 0.002 -0.022 0.027 0.017 0.197 0.844
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with openness change score (ideal-self) is not significantly different from zero, r = 0.017, p = 0.844.

6.4.1.19 Openness - current-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5660.778 5756.354 0.965 0.073 0.116
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.009 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.468 NA NA
d_openn_1 ~1 0.078 0.031 0.126 0.291 3.237 0.001
openn_t1 ~1 3.485 3.410 3.561 6.009 90.613 0.000
d_openn_1 ~~ d_openn_1 0.072 0.038 0.106 1.000 4.176 0.000
openn_t1 ~~ d_openn_1 -0.039 -0.075 -0.004 -0.252 -2.176 0.030
goals ~~ d_openn_1 -0.021 -0.051 0.009 -0.130 -1.392 0.164
goals ~~ goals 0.364 0.241 0.487 1.000 5.801 0.000

The correlation of specific, facet-level change goals with openness change score (current-self) is not significantly different from zero, r = -0.13, p = 0.164.

6.4.1.20 Openness - ideal-self: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5521.528 5617.104 0.977 0.051 0.06
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.109 1.132 0.258
openn_t1 ~1 3.917 3.856 3.979 13.331 125.069 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.884 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.303 -1.912 0.056
goals ~~ d_openn_1 -0.002 -0.019 0.016 -0.017 -0.177 0.860
goals ~~ goals 0.365 0.242 0.488 1.000 5.810 0.000

Correlation of specific, facet-level change goals with openness change score (ideal-self) is not significantly different from zero, r = -0.017, p = 0.86.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7948.7 8032.807 0.912 0.1 0.094
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.091 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.515 NA NA
d_socia_1 ~1 0.074 0.001 0.146 0.191 1.998 0.046
socia_t1 ~1 2.875 2.747 3.003 3.514 44.013 0.000
d_socia_1 ~~ d_socia_1 0.149 0.076 0.222 1.000 4.017 0.000
socia_t1 ~~ d_socia_1 -0.128 -0.196 -0.060 -0.405 -3.705 0.000
d_socia_1 ~~ sb06_01_t1 -0.025 -0.087 0.037 -0.065 -0.796 0.426
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

The correlation of the general change goal with the sociability change score (current-self) is significantly different from zero, r = -0.065, p = 0.426.

6.4.2.2 Sociability - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7781.319 7865.426 0.935 0.053 0.056
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.993 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.650 NA NA
d_socia_1 ~1 -0.033 -0.088 0.023 -0.120 -1.155 0.248
socia_t1 ~1 4.241 4.158 4.324 10.208 100.432 0.000
d_socia_1 ~~ d_socia_1 0.074 0.014 0.133 1.000 2.426 0.015
socia_t1 ~~ d_socia_1 -0.036 -0.070 -0.001 -0.317 -2.028 0.043
d_socia_1 ~~ sb06_01_t1 0.042 -0.012 0.095 0.153 1.531 0.126
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with sociability change score (ideal-self) is not significantly different from zero, r = 0.153, p = 0.126.

6.4.2.3 Sociability - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7943.529 8027.636 0.885 0.117 0.13
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.127 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.561 NA NA
d_socia_1 ~1 0.075 0.002 0.147 0.184 2.025 0.043
socia_t1 ~1 2.876 2.748 3.004 3.526 44.021 0.000
d_socia_1 ~~ d_socia_1 0.165 0.082 0.248 1.000 3.887 0.000
socia_t1 ~~ d_socia_1 -0.153 -0.229 -0.077 -0.462 -3.944 0.000
d_socia_1 ~~ sb07_01_t1 -0.082 -0.158 -0.007 -0.203 -2.128 0.033
sb07_01_t1 ~~ sb07_01_t1 0.997 0.874 1.120 1.000 15.899 0.000

Correlation of specific, facet-level change goals with sociability change score (current-self) is significantly different from zero, r = -0.203, p = 0.033.

6.4.2.4 Sociability - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7782.407 7866.514 0.947 0.047 0.056
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.975 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.613 NA NA
d_socia_1 ~1 -0.031 -0.086 0.025 -0.115 -1.071 0.284
socia_t1 ~1 4.241 4.158 4.323 10.068 100.472 0.000
d_socia_1 ~~ d_socia_1 0.070 0.012 0.128 1.000 2.360 0.018
socia_t1 ~~ d_socia_1 -0.030 -0.064 0.003 -0.273 -1.766 0.077
d_socia_1 ~~ sb07_01_t1 -0.033 -0.087 0.020 -0.126 -1.224 0.221
sb07_01_t1 ~~ sb07_01_t1 0.997 0.874 1.120 1.000 15.899 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal-self) is not significantly different from zero, r = -0.126, p = 0.221.

6.4.2.5 Assertiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8168.656 8252.763 0.959 0.061 0.064
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.035 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.492 NA NA
d_asser_1 ~1 0.060 0.011 0.109 0.220 2.416 0.016
asser_t1 ~1 3.093 2.973 3.213 5.362 50.389 0.000
d_asser_1 ~~ d_asser_1 0.075 0.014 0.136 1.000 2.425 0.015
asser_t1 ~~ d_asser_1 -0.049 -0.092 -0.005 -0.307 -2.201 0.028
d_asser_1 ~~ sb06_01_t1 -0.019 -0.063 0.025 -0.069 -0.848 0.397
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with assertiveness change score (current-self) is not significantly different from zero, r = -0.069, p = 0.397.

6.4.2.6 Assertiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7866.05 7950.157 0.947 0.047 0.048
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.971 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.623 NA NA
d_asser_1 ~1 -0.005 -0.044 0.035 -0.024 -0.237 0.813
asser_t1 ~1 4.145 4.064 4.226 13.421 100.252 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.009 0.087 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.041 0.008 -0.274 -1.341 0.180
d_asser_1 ~~ sb06_01_t1 -0.013 -0.055 0.028 -0.067 -0.629 0.530
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with assertiveness change score (ideal-self) is not significantly different from zero, r = -0.067, p = 0.53.

6.4.2.7 Assertiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8164.116 8248.223 0.925 0.084 0.088
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.046 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.502 NA NA
d_asser_1 ~1 0.060 0.011 0.109 0.216 2.394 0.017
asser_t1 ~1 3.093 2.973 3.213 5.363 50.407 0.000
d_asser_1 ~~ d_asser_1 0.077 0.015 0.139 1.000 2.431 0.015
asser_t1 ~~ d_asser_1 -0.053 -0.098 -0.007 -0.330 -2.285 0.022
d_asser_1 ~~ sb07_02_t1 -0.052 -0.100 -0.004 -0.189 -2.134 0.033
sb07_02_t1 ~~ sb07_02_t1 0.997 0.883 1.111 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current-self) is significantly different from zero, r = -0.189, p = 0.033.

6.4.2.8 Assertiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7866.416 7950.524 0.948 0.046 0.048
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.975 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.630 NA NA
d_asser_1 ~1 -0.005 -0.044 0.034 -0.024 -0.241 0.810
asser_t1 ~1 4.145 4.064 4.226 13.610 100.283 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.009 0.086 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.042 0.008 -0.282 -1.350 0.177
d_asser_1 ~~ sb07_02_t1 0.008 -0.029 0.045 0.039 0.405 0.686
sb07_02_t1 ~~ sb07_02_t1 0.997 0.883 1.111 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.039, p = 0.686.

6.4.2.9 Energy - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8345.288 8429.395 0.958 0.055 0.071
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.087 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.502 NA NA
d_energ_1 ~1 0.056 0.016 0.095 0.361 2.761 0.006
energ_t1 ~1 3.230 3.122 3.338 9.695 58.588 0.000
d_energ_1 ~~ d_energ_1 0.024 -0.002 0.049 1.000 1.816 0.069
energ_t1 ~~ d_energ_1 -0.020 -0.041 0.000 -0.398 -1.944 0.052
d_energ_1 ~~ sb06_01_t1 -0.016 -0.048 0.016 -0.103 -0.976 0.329
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with energy change score (current-self) is not significantly different from zero, r = -0.103, p = 0.329.

6.4.2.10 Energy - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7741.959 7826.066 0.93 0.045 0.05
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.565 NA NA
d_energ_1 ~1 -0.039 -0.077 -0.001 -0.319 -2.034 0.042
energ_t1 ~1 3.758 3.640 3.876 21.511 62.558 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.007 0.037 1.000 1.347 0.178
energ_t1 ~~ d_energ_1 0.001 -0.009 0.010 0.037 0.163 0.870
d_energ_1 ~~ sb06_01_t1 0.000 -0.030 0.030 -0.001 -0.008 0.993
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with energy change score (ideal-self) is not significantly different from zero, r = -0.001, p = 0.993.

6.4.2.11 Energy - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8346.658 8430.765 0.89 0.091 0.104
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.076 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.485 NA NA
d_energ_1 ~1 0.055 0.016 0.095 0.368 2.736 0.006
energ_t1 ~1 3.230 3.122 3.338 9.663 58.566 0.000
d_energ_1 ~~ d_energ_1 0.023 -0.002 0.047 1.000 1.797 0.072
energ_t1 ~~ d_energ_1 -0.019 -0.039 0.001 -0.376 -1.879 0.060
d_energ_1 ~~ sb07_03_t1 0.001 -0.027 0.029 0.007 0.074 0.941
sb07_03_t1 ~~ sb07_03_t1 0.997 0.871 1.123 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (current-self) is not significantly different from zero, r = 0.007, p = 0.941.

6.4.2.12 Energy - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7741.935 7826.042 0.939 0.042 0.05
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.564 NA NA
d_energ_1 ~1 -0.039 -0.077 -0.002 -0.320 -2.043 0.041
energ_t1 ~1 3.758 3.640 3.876 21.503 62.551 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.007 0.037 1.000 1.346 0.178
energ_t1 ~~ d_energ_1 0.001 -0.009 0.011 0.040 0.173 0.862
d_energ_1 ~~ sb07_03_t1 -0.002 -0.028 0.024 -0.016 -0.153 0.879
sb07_03_t1 ~~ sb07_03_t1 0.997 0.871 1.123 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (ideal-self) is not significantly different from zero, r = -0.016, p = 0.879.

6.4.2.13 Compassion - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8071.261 8155.368 0.965 0.044 0.049
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.127 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.455 NA NA
d_compa_1 ~1 0.100 0.038 0.162 0.412 3.182 0.001
compa_t1 ~1 4.184 4.090 4.277 6.940 87.951 0.000
d_compa_1 ~~ d_compa_1 0.059 0.006 0.113 1.000 2.163 0.031
compa_t1 ~~ d_compa_1 -0.068 -0.116 -0.020 -0.465 -2.797 0.005
d_compa_1 ~~ sb06_01_t1 0.026 -0.025 0.077 0.109 1.014 0.311
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with compassion change score (current-self) is not significantly different from zero, r = 0.109, p = 0.311.

6.4.2.14 Compassion - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8190.032 8274.139 0.983 0.024 0.048
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.427 NA NA
d_compa_1 ~1 -0.040 -0.112 0.031 -0.180 -1.109 0.267
compa_t1 ~1 4.225 4.132 4.319 8.252 88.493 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.031 0.131 1.000 1.203 0.229
compa_t1 ~~ d_compa_1 -0.019 -0.081 0.043 -0.168 -0.606 0.544
d_compa_1 ~~ sb06_01_t1 -0.029 -0.086 0.027 -0.131 -1.012 0.312
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with compassion change score (ideal-self) is not significantly different from zero, r = -0.131, p = 0.312.

6.4.2.15 Compassion - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8072.163 8156.27 0.925 0.067 0.079
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.136 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.468 NA NA
d_compa_1 ~1 0.099 0.038 0.160 0.403 3.164 0.002
compa_t1 ~1 4.184 4.091 4.277 7.011 88.158 0.000
d_compa_1 ~~ d_compa_1 0.061 0.008 0.113 1.000 2.267 0.023
compa_t1 ~~ d_compa_1 -0.070 -0.117 -0.023 -0.479 -2.928 0.003
d_compa_1 ~~ sb07_04_t1 -0.008 -0.064 0.049 -0.031 -0.264 0.792
sb07_04_t1 ~~ sb07_04_t1 0.997 0.899 1.095 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (current-self) is not significantly different from zero, r = -0.031, p = 0.792.

6.4.2.16 Compassion - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8190.757 8274.864 0.914 0.055 0.067
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.976 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.423 NA NA
d_compa_1 ~1 -0.041 -0.113 0.030 -0.185 -1.134 0.257
compa_t1 ~1 4.225 4.132 4.319 8.211 88.429 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.032 0.132 1.000 1.188 0.235
compa_t1 ~~ d_compa_1 -0.018 -0.081 0.044 -0.160 -0.578 0.563
d_compa_1 ~~ sb07_04_t1 0.013 -0.052 0.079 0.060 0.403 0.687
sb07_04_t1 ~~ sb07_04_t1 0.997 0.899 1.095 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal-self) is not significantly different from zero, r = 0.06, p = 0.687.

6.4.2.17 Respectfulness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6996.045 7080.152 0.949 0.063 0.066
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.165 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.638 NA NA
d_respe_1 ~1 0.017 -0.039 0.074 0.056 0.601 0.548
respe_t1 ~1 4.474 4.396 4.552 7.919 111.900 0.000
d_respe_1 ~~ d_respe_1 0.096 0.032 0.160 1.000 2.938 0.003
respe_t1 ~~ d_respe_1 -0.090 -0.155 -0.025 -0.514 -2.718 0.007
d_respe_1 ~~ sb06_01_t1 0.000 -0.050 0.051 0.001 0.013 0.990
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with respectfulness change score (current-self) is not significantly different from zero, r = 0.001, p = 0.99.

6.4.2.18 Respectfulness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6603.885 6687.992 0.964 0.042 0.046
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.105 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.674 NA NA
d_respe_1 ~1 -0.001 -0.051 0.048 -0.005 -0.051 0.960
respe_t1 ~1 4.710 4.650 4.770 12.020 153.576 0.000
d_respe_1 ~~ d_respe_1 0.057 0.019 0.095 1.000 2.911 0.004
respe_t1 ~~ d_respe_1 -0.042 -0.077 -0.008 -0.454 -2.401 0.016
d_respe_1 ~~ sb06_01_t1 0.008 -0.037 0.054 0.036 0.367 0.714
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with respectfulness change score (ideal-self) is not significantly different from zero, r = 0.036, p = 0.714.

6.4.2.19 Respectfulness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6992.447 7076.554 0.905 0.088 0.102
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.198 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.684 NA NA
d_respe_1 ~1 0.020 -0.036 0.076 0.061 0.688 0.491
respe_t1 ~1 4.474 4.396 4.552 7.905 111.873 0.000
d_respe_1 ~~ d_respe_1 0.104 0.037 0.172 1.000 3.016 0.003
respe_t1 ~~ d_respe_1 -0.101 -0.169 -0.033 -0.551 -2.909 0.004
d_respe_1 ~~ sb07_05_t1 -0.049 -0.098 0.001 -0.150 -1.915 0.056
sb07_05_t1 ~~ sb07_05_t1 0.997 0.877 1.117 1.000 16.296 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current-self) is not significantly different from zero, r = -0.15, p = 0.056.

6.4.2.20 Respectfulness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6601.026 6685.133 0.961 0.044 0.052
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.116 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.695 NA NA
d_respe_1 ~1 0.000 -0.049 0.049 0.001 0.012 0.991
respe_t1 ~1 4.710 4.650 4.770 12.065 153.595 0.000
d_respe_1 ~~ d_respe_1 0.059 0.020 0.098 1.000 2.993 0.003
respe_t1 ~~ d_respe_1 -0.045 -0.079 -0.010 -0.469 -2.506 0.012
d_respe_1 ~~ sb07_05_t1 -0.037 -0.082 0.008 -0.151 -1.591 0.112
sb07_05_t1 ~~ sb07_05_t1 0.997 0.877 1.117 1.000 16.296 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal-self) is not significantly different from zero, r = -0.151, p = 0.112.

6.4.2.21 Trust - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8332.229 8416.336 0.927 0.071 0.078
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.065 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.490 NA NA
d_trust_1 ~1 0.095 0.019 0.171 0.323 2.453 0.014
trust_t1 ~1 3.164 3.040 3.288 4.947 49.985 0.000
d_trust_1 ~~ d_trust_1 0.087 0.009 0.165 1.000 2.176 0.030
trust_t1 ~~ d_trust_1 -0.067 -0.132 -0.002 -0.358 -2.033 0.042
d_trust_1 ~~ sb06_01_t1 0.035 -0.028 0.098 0.118 1.089 0.276
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with trust change score (current-self) is not significantly different from zero, r = 0.118, p = 0.276.

6.4.2.22 Trust - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8005.868 8089.975 0.958 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.338 NA NA
d_trust_1 ~1 -0.062 -0.107 -0.017 -0.471 -2.705 0.007
trust_t1 ~1 4.100 4.007 4.192 11.769 86.694 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.018 0.052 1.000 0.962 0.336
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.133 0.542 0.588
d_trust_1 ~~ sb06_01_t1 0.006 -0.039 0.050 0.045 0.260 0.795
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with trust change score (ideal-self) is not significantly different from zero, r = 0.045, p = 0.795.

6.4.2.23 Trust - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8332.905 8417.012 0.941 0.063 0.065
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.069 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.500 NA NA
d_trust_1 ~1 0.096 0.021 0.172 0.320 2.499 0.012
trust_t1 ~1 3.164 3.040 3.288 4.928 49.963 0.000
d_trust_1 ~~ d_trust_1 0.090 0.012 0.168 1.000 2.264 0.024
trust_t1 ~~ d_trust_1 -0.071 -0.135 -0.007 -0.368 -2.166 0.030
d_trust_1 ~~ sb07_06_t1 0.025 -0.041 0.090 0.082 0.739 0.460
sb07_06_t1 ~~ sb07_06_t1 0.997 0.903 1.091 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (current-self) is not significantly different from zero, r = 0.082, p = 0.46.

6.4.2.24 Trust - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8004.657 8088.764 0.959 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.336 NA NA
d_trust_1 ~1 -0.062 -0.107 -0.018 -0.478 -2.733 0.006
trust_t1 ~1 4.100 4.007 4.192 11.767 86.724 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.018 0.052 1.000 0.958 0.338
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.138 0.560 0.575
d_trust_1 ~~ sb07_06_t1 0.024 -0.022 0.070 0.182 1.019 0.308
sb07_06_t1 ~~ sb07_06_t1 0.997 0.903 1.091 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (ideal-self) is not significantly different from zero, r = 0.182, p = 0.308.

6.4.2.25 Organization - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7860.379 7944.486 0.981 0.047 0.037
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.453 NA NA
d_organ_1 ~1 0.088 0.006 0.171 0.192 2.101 0.036
organ_t1 ~1 3.144 2.996 3.291 3.051 41.786 0.000
d_organ_1 ~~ d_organ_1 0.212 0.082 0.342 1.000 3.195 0.001
organ_t1 ~~ d_organ_1 -0.120 -0.218 -0.022 -0.254 -2.409 0.016
d_organ_1 ~~ sb06_01_t1 0.007 -0.075 0.088 0.015 0.163 0.871
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with organization change score (current-self) is not significantly different from zero, r = 0.015, p = 0.871.

6.4.2.26 Organization - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7050.268 7134.375 0.797 0.077 0.089
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.980 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.709 NA NA
d_organ_1 ~1 0.021 -0.044 0.086 0.075 0.641 0.521
organ_t1 ~1 4.321 4.218 4.425 11.022 81.751 0.000
d_organ_1 ~~ d_organ_1 0.080 0.014 0.146 1.000 2.391 0.017
organ_t1 ~~ d_organ_1 -0.037 -0.087 0.013 -0.333 -1.461 0.144
d_organ_1 ~~ sb06_01_t1 -0.004 -0.057 0.048 -0.016 -0.165 0.869
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with organization change score (ideal-self) is not significantly different from zero, r = -0.016, p = 0.869.

6.4.2.27 Organization - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7856.681 7940.788 0.857 0.137 0.168
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.065 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.513 NA NA
d_organ_1 ~1 0.089 0.007 0.171 0.180 2.116 0.034
organ_t1 ~1 3.144 2.997 3.291 3.056 41.799 0.000
d_organ_1 ~~ d_organ_1 0.245 0.098 0.393 1.000 3.253 0.001
organ_t1 ~~ d_organ_1 -0.185 -0.311 -0.059 -0.363 -2.872 0.004
d_organ_1 ~~ sb07_07_t1 -0.094 -0.192 0.003 -0.190 -1.890 0.059
sb07_07_t1 ~~ sb07_07_t1 0.997 0.910 1.084 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (current-self) is not significantly different from zero, r = -0.19, p = 0.059.

6.4.2.28 Organization - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7048.768 7132.875 0.764 0.084 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.979 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.715 NA NA
d_organ_1 ~1 0.020 -0.045 0.084 0.069 0.597 0.551
organ_t1 ~1 4.322 4.218 4.425 11.144 81.914 0.000
d_organ_1 ~~ d_organ_1 0.080 0.014 0.147 1.000 2.368 0.018
organ_t1 ~~ d_organ_1 -0.037 -0.086 0.013 -0.335 -1.456 0.146
d_organ_1 ~~ sb07_07_t1 -0.033 -0.089 0.024 -0.115 -1.133 0.257
sb07_07_t1 ~~ sb07_07_t1 0.997 0.910 1.084 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (ideal-self) is not significantly different from zero, r = -0.115, p = 0.257.

6.4.2.29 Productiveness - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7898.333 7982.44 0.941 0.079 0.07
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.021 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.655 NA NA
d_produ_1 ~1 0.163 0.073 0.254 0.271 3.534 0.00
produ_t1 ~1 2.583 2.449 2.716 2.752 37.926 0.00
d_produ_1 ~~ d_produ_1 0.363 0.169 0.556 1.000 3.670 0.00
produ_t1 ~~ d_produ_1 -0.199 -0.309 -0.089 -0.352 -3.557 0.00
d_produ_1 ~~ sb06_01_t1 0.004 -0.099 0.107 0.007 0.075 0.94
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.00
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.00

Correlation of general change goal with productiveness change score (current-self) is not significantly different from zero, r = 0.007, p = 0.94.

6.4.2.30 Productiveness - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 5959.765 6043.872 0.915 0.071 0.064
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.887 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.584 NA NA
d_produ_1 ~1 -0.012 -0.060 0.036 -0.048 -0.494 0.621
produ_t1 ~1 4.404 4.325 4.483 11.467 108.850 0.000
d_produ_1 ~~ d_produ_1 0.064 0.009 0.119 1.000 2.263 0.024
produ_t1 ~~ d_produ_1 -0.012 -0.043 0.019 -0.123 -0.745 0.456
d_produ_1 ~~ sb06_01_t1 0.021 -0.027 0.068 0.082 0.856 0.392
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with productiveness change score (ideal-self) is not significantly different from zero, r = 0.082, p = 0.392.

6.4.2.31 Productiveness - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7889.998 7974.105 0.851 0.132 0.155
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.093 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.763 NA NA
d_produ_1 ~1 0.165 0.075 0.255 0.253 3.595 0.000
produ_t1 ~1 2.583 2.450 2.717 2.773 37.951 0.000
d_produ_1 ~~ d_produ_1 0.422 0.209 0.636 1.000 3.884 0.000
produ_t1 ~~ d_produ_1 -0.282 -0.406 -0.158 -0.466 -4.464 0.000
d_produ_1 ~~ sb07_08_t1 -0.146 -0.252 -0.039 -0.224 -2.677 0.007
sb07_08_t1 ~~ sb07_08_t1 0.997 0.867 1.127 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (current-self) is significantly different from zero, r = -0.224, p = 0.007.

6.4.2.32 Productiveness - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 5958.989 6043.096 0.916 0.071 0.063
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.880 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.574 NA NA
d_produ_1 ~1 -0.012 -0.059 0.036 -0.047 -0.481 0.631
produ_t1 ~1 4.404 4.324 4.483 11.538 108.914 0.000
d_produ_1 ~~ d_produ_1 0.062 0.008 0.115 1.000 2.270 0.023
produ_t1 ~~ d_produ_1 -0.010 -0.041 0.021 -0.103 -0.624 0.533
d_produ_1 ~~ sb07_08_t1 -0.029 -0.070 0.011 -0.118 -1.415 0.157
sb07_08_t1 ~~ sb07_08_t1 0.997 0.867 1.127 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal-self) is not significantly different from zero, r = -0.118, p = 0.157.

6.4.2.33 Responsibility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8070.936 8155.043 0.903 0.087 0.093
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.038 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.545 NA NA
d_respo_1 ~1 0.057 0.005 0.108 0.221 2.166 0.030
respo_t1 ~1 3.598 3.494 3.703 7.363 67.313 0.000
d_respo_1 ~~ d_respo_1 0.066 0.011 0.120 1.000 2.357 0.018
respo_t1 ~~ d_respo_1 -0.041 -0.080 -0.003 -0.330 -2.097 0.036
d_respo_1 ~~ sb06_01_t1 0.011 -0.037 0.060 0.044 0.457 0.648
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with responsibility change score (current-self) is not significantly different from zero, r = 0.044, p = 0.648.

6.4.2.34 Responsibility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7570.76 7654.867 0.922 0.06 0.054
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.668 NA NA
d_respo_1 ~1 -0.007 -0.043 0.030 -0.036 -0.365 0.715
respo_t1 ~1 4.189 4.080 4.297 14.439 75.423 0.000
d_respo_1 ~~ d_respo_1 0.036 0.001 0.071 1.000 2.016 0.044
respo_t1 ~~ d_respo_1 -0.020 -0.044 0.005 -0.355 -1.584 0.113
d_respo_1 ~~ sb06_01_t1 0.015 -0.022 0.052 0.079 0.800 0.424
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.079, p = 0.424.

6.4.2.35 Responsibility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8067.882 8151.989 0.859 0.108 0.12
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.075 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.597 NA NA
d_respo_1 ~1 0.058 0.007 0.109 0.214 2.223 0.026
respo_t1 ~1 3.598 3.494 3.703 7.385 67.334 0.000
d_respo_1 ~~ d_respo_1 0.073 0.015 0.131 1.000 2.468 0.014
respo_t1 ~~ d_respo_1 -0.053 -0.096 -0.009 -0.399 -2.351 0.019
d_respo_1 ~~ sb07_09_t1 -0.044 -0.094 0.007 -0.161 -1.683 0.092
sb07_09_t1 ~~ sb07_09_t1 0.997 0.913 1.081 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (current-self) is not significantly different from zero, r = -0.161, p = 0.092.

6.4.2.36 Responsibility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7571.382 7655.489 0.936 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.020 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.665 NA NA
d_respo_1 ~1 -0.006 -0.043 0.031 -0.031 -0.319 0.749
respo_t1 ~1 4.188 4.080 4.297 14.264 75.446 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.030 0.042
respo_t1 ~~ d_respo_1 -0.020 -0.045 0.005 -0.356 -1.574 0.116
d_respo_1 ~~ sb07_09_t1 -0.007 -0.044 0.031 -0.035 -0.346 0.729
sb07_09_t1 ~~ sb07_09_t1 0.997 0.913 1.081 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.035, p = 0.729.

6.4.2.37 Anxiety - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8139.645 8223.752 0.952 0.062 0.084
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.023 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.464 NA NA
d_anxie_1 ~1 -0.216 -0.304 -0.128 -0.506 -4.833 0.000
anxie_t1 ~1 3.252 3.117 3.387 3.455 47.291 0.000
d_anxie_1 ~~ d_anxie_1 0.182 0.070 0.295 1.000 3.176 0.001
anxie_t1 ~~ d_anxie_1 -0.111 -0.222 0.001 -0.275 -1.940 0.052
d_anxie_1 ~~ sb06_01_t1 -0.020 -0.115 0.075 -0.048 -0.419 0.675
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with anxiety change score (current-self) is not significantly different from zero, r = -0.048, p = 0.675.

6.4.2.38 Anxiety - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7712.349 7796.456 0.958 0.028 0.046
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.898 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.895 NA NA
d_anxie_1 ~1 0.022 -0.025 0.070 0.087 0.922 0.356
anxie_t1 ~1 1.404 1.342 1.465 5.468 44.809 0.000
d_anxie_1 ~~ d_anxie_1 0.065 0.004 0.127 1.000 2.074 0.038
anxie_t1 ~~ d_anxie_1 -0.025 -0.053 0.003 -0.378 -1.742 0.082
d_anxie_1 ~~ sb06_01_t1 -0.046 -0.093 0.001 -0.180 -1.907 0.056
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with anxiety change score (ideal-self) is not significantly different from zero, r = -0.18, p = 0.056.

6.4.2.39 Anxiety - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8139.771 8223.878 0.853 0.115 0.151
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.038 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.482 NA NA
d_anxie_1 ~1 -0.216 -0.304 -0.128 -0.494 -4.817 0.000
anxie_t1 ~1 3.252 3.117 3.387 3.458 47.285 0.000
d_anxie_1 ~~ d_anxie_1 0.191 0.075 0.306 1.000 3.227 0.001
anxie_t1 ~~ d_anxie_1 -0.127 -0.250 -0.004 -0.309 -2.032 0.042
d_anxie_1 ~~ sb07_10_t1 0.016 -0.083 0.115 0.037 0.319 0.750
sb07_10_t1 ~~ sb07_10_t1 0.997 0.894 1.100 1.000 18.985 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current-self) is not significantly different from zero, r = 0.037, p = 0.75.

6.4.2.40 Anxiety - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7716.877 7800.984 0.938 0.034 0.051
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.881 NA NA
d_anxie_1 ~1 0.021 -0.027 0.070 0.083 0.870 0.384
anxie_t1 ~1 1.404 1.342 1.465 5.376 44.707 0.000
d_anxie_1 ~~ d_anxie_1 0.066 0.004 0.129 1.000 2.085 0.037
anxie_t1 ~~ d_anxie_1 -0.024 -0.053 0.004 -0.364 -1.690 0.091
d_anxie_1 ~~ sb07_10_t1 -0.014 -0.055 0.027 -0.055 -0.677 0.499
sb07_10_t1 ~~ sb07_10_t1 0.997 0.894 1.100 1.000 18.985 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.055, p = 0.499.

6.4.2.41 Depression - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8092.504 8176.611 0.905 0.107 0.118
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.071 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.607 NA NA
d_depre_1 ~1 -0.117 -0.178 -0.056 -0.310 -3.753 0.000
depre_t1 ~1 2.963 2.842 3.083 4.449 48.150 0.000
d_depre_1 ~~ d_depre_1 0.142 0.072 0.212 1.000 3.970 0.000
depre_t1 ~~ d_depre_1 -0.100 -0.158 -0.041 -0.397 -3.341 0.001
d_depre_1 ~~ sb06_01_t1 0.027 -0.036 0.090 0.072 0.841 0.400
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with depression change score (current-self) is not significantly different from zero, r = 0.072, p = 0.4.

6.4.2.42 Depression - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6466.763 6550.87 0.913 0.063 0.064
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.886 NA NA
d_depre_1 ~1 0.018 -0.021 0.057 0.072 0.894 0.371
depre_t1 ~1 1.546 1.476 1.616 5.350 43.274 0.000
d_depre_1 ~~ d_depre_1 0.061 0.017 0.105 1.000 2.717 0.007
depre_t1 ~~ d_depre_1 -0.033 -0.062 -0.005 -0.467 -2.281 0.023
d_depre_1 ~~ sb06_01_t1 -0.016 -0.053 0.022 -0.064 -0.822 0.411
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with depression change score (ideal-self) is not significantly different from zero, r = -0.064, p = 0.411.

6.4.2.43 Depression - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8077.527 8161.634 0.811 0.161 0.185
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.180 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.774 NA NA
d_depre_1 ~1 -0.115 -0.176 -0.054 -0.264 -3.681 0.000
depre_t1 ~1 2.962 2.841 3.083 4.476 48.145 0.000
d_depre_1 ~~ d_depre_1 0.189 0.090 0.287 1.000 3.758 0.000
depre_t1 ~~ d_depre_1 -0.156 -0.237 -0.075 -0.543 -3.778 0.000
d_depre_1 ~~ sb07_11_t1 0.136 0.057 0.215 0.314 3.386 0.001
sb07_11_t1 ~~ sb07_11_t1 0.997 0.924 1.070 1.000 26.880 0.000

The correlation of specific, facet-level change goals with the depression change score (current-self) is significantly different from zero, r = 0.314, p = 0.001.

6.4.2.44 Depression - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6467.046 6551.153 0.901 0.067 0.067
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.884 NA NA
d_depre_1 ~1 0.018 -0.021 0.058 0.073 0.902 0.367
depre_t1 ~1 1.546 1.476 1.616 5.312 43.279 0.000
d_depre_1 ~~ d_depre_1 0.062 0.017 0.106 1.000 2.734 0.006
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.466 -2.288 0.022
d_depre_1 ~~ sb07_11_t1 0.013 -0.019 0.046 0.054 0.811 0.417
sb07_11_t1 ~~ sb07_11_t1 0.997 0.924 1.070 1.000 26.880 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal-self) is not significantly different from zero, r = 0.054, p = 0.417.

6.4.2.45 Volatility - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8137.232 8221.339 0.965 0.061 0.086
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.162 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.671 NA NA
d_volat_1 ~1 -0.177 -0.265 -0.089 -0.311 -3.949 0.000
volat_t1 ~1 3.117 2.978 3.256 3.161 43.889 0.000
d_volat_1 ~~ d_volat_1 0.324 0.196 0.452 1.000 4.948 0.000
volat_t1 ~~ d_volat_1 -0.288 -0.397 -0.179 -0.514 -5.187 0.000
d_volat_1 ~~ sb06_01_t1 0.015 -0.066 0.096 0.026 0.354 0.724
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with volatility change score (current-self) is not significantly different from zero, r = 0.026, p = 0.724.

6.4.2.46 Volatility - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7251.022 7335.129 0.957 0.041 0.052
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.847 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.644 NA NA
d_volat_1 ~1 0.046 -0.016 0.107 0.143 1.463 0.144
volat_t1 ~1 1.599 1.523 1.674 3.803 41.347 0.000
d_volat_1 ~~ d_volat_1 0.102 0.022 0.183 1.000 2.486 0.013
volat_t1 ~~ d_volat_1 -0.016 -0.059 0.027 -0.121 -0.741 0.459
d_volat_1 ~~ sb06_01_t1 -0.031 -0.086 0.024 -0.097 -1.101 0.271
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with volatility change score (ideal-self) is not significantly different from zero, r = -0.097, p = 0.271.

6.4.2.47 Volatility - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8132.027 8216.134 0.959 0.066 0.092
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.192 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.712 NA NA
d_volat_1 ~1 -0.178 -0.266 -0.089 -0.301 -3.942 0.000
volat_t1 ~1 3.117 2.978 3.256 3.151 43.873 0.000
d_volat_1 ~~ d_volat_1 0.349 0.210 0.488 1.000 4.925 0.000
volat_t1 ~~ d_volat_1 -0.319 -0.435 -0.204 -0.546 -5.407 0.000
d_volat_1 ~~ sb07_12_t1 0.096 0.005 0.186 0.162 2.071 0.038
sb07_12_t1 ~~ sb07_12_t1 0.997 0.906 1.088 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (current-self) is significantly different from zero, r = 0.162, p = 0.038.

6.4.2.48 Volatility - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7251.161 7335.268 0.971 0.034 0.044
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.840 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.633 NA NA
d_volat_1 ~1 0.045 -0.016 0.107 0.143 1.447 0.148
volat_t1 ~1 1.599 1.523 1.674 3.812 41.368 0.000
d_volat_1 ~~ d_volat_1 0.100 0.020 0.179 1.000 2.454 0.014
volat_t1 ~~ d_volat_1 -0.013 -0.055 0.029 -0.100 -0.618 0.537
d_volat_1 ~~ sb07_12_t1 0.029 -0.028 0.087 0.094 1.005 0.315
sb07_12_t1 ~~ sb07_12_t1 0.997 0.906 1.088 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal-self) is not significantly different from zero, r = 0.094, p = 0.315.

6.4.2.49 Curiosity - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7952.839 8036.946 0.989 0.026 0.04
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.994 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.433 NA NA
d_curio_1 ~1 0.038 -0.010 0.085 0.198 1.537 0.124
curio_t1 ~1 4.182 4.095 4.269 9.590 93.797 0.000
d_curio_1 ~~ d_curio_1 0.036 -0.001 0.073 1.000 1.902 0.057
curio_t1 ~~ d_curio_1 -0.017 -0.047 0.013 -0.203 -1.095 0.273
d_curio_1 ~~ sb06_01_t1 -0.007 -0.050 0.036 -0.036 -0.316 0.752
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with curiosity change score (current-self) is not significantly different from zero, r = -0.036, p = 0.752.

6.4.2.50 Curiosity - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7926.982 8011.089 0.926 0.052 0.057
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.467 NA NA
d_curio_1 ~1 0.024 -0.017 0.064 0.168 1.147 0.251
curio_t1 ~1 4.536 4.465 4.606 15.423 126.046 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.006 0.046 1.000 1.475 0.140
curio_t1 ~~ d_curio_1 -0.008 -0.025 0.009 -0.195 -0.906 0.365
d_curio_1 ~~ sb06_01_t1 0.026 -0.013 0.066 0.189 1.322 0.186
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with curiosity change score (ideal-self) is not significantly different from zero, r = 0.189, p = 0.186.

6.4.2.51 Curiosity - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7952.518 8036.625 0.953 0.054 0.076
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.983 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.420 NA NA
d_curio_1 ~1 0.037 -0.010 0.085 0.201 1.538 0.124
curio_t1 ~1 4.182 4.095 4.269 9.666 93.832 0.000
d_curio_1 ~~ d_curio_1 0.034 -0.003 0.071 1.000 1.821 0.069
curio_t1 ~~ d_curio_1 -0.014 -0.045 0.017 -0.174 -0.879 0.379
d_curio_1 ~~ sb07_13_t1 0.015 -0.034 0.064 0.082 0.608 0.543
sb07_13_t1 ~~ sb07_13_t1 0.997 0.886 1.109 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (current-self) is not significantly different from zero, r = 0.082, p = 0.543.

6.4.2.52 Curiosity - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7929.133 8013.24 0.951 0.042 0.054
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.979 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.466 NA NA
d_curio_1 ~1 0.024 -0.017 0.065 0.166 1.130 0.259
curio_t1 ~1 4.536 4.465 4.607 15.149 125.972 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.007 0.048 1.000 1.462 0.144
curio_t1 ~~ d_curio_1 -0.008 -0.026 0.010 -0.193 -0.889 0.374
d_curio_1 ~~ sb07_13_t1 -0.001 -0.037 0.036 -0.004 -0.027 0.978
sb07_13_t1 ~~ sb07_13_t1 0.997 0.886 1.109 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.004, p = 0.978.

6.4.2.53 Aesthetic - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8160.297 8244.404 1 0 0.031
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.489 NA NA
d_aesth_1 ~1 0.007 -0.011 0.026 0.075 0.783 0.433
aesth_t1 ~1 3.066 2.942 3.190 15.109 48.465 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.231 0.218
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.244 -1.059 0.290
d_aesth_1 ~~ sb06_01_t1 -0.018 -0.039 0.002 -0.185 -1.735 0.083
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.185, p = 0.083.

6.4.2.54 Aesthetic - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_ideal_hyp4 <- '
aesth_t1 =~ 1*bf06_05_t1 + lamb2*bf06_20_t1 + lamb3*bf06_35_t1 + lamb4*bf06_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf06_05_t2 + lamb2*bf06_20_t2 + lamb3*bf06_35_t2 + lamb4*bf06_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

bf06_05_t1 ~~ bf06_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf06_20_t1 ~~ bf06_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf06_35_t1 ~~ bf06_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf06_50_t1 ~~ bf06_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf06_05_t1 ~~ res1*bf06_05_t1   # This allows residual variance on indicator X1 at T1 
bf06_20_t1 ~~ res2*bf06_20_t1   # This allows residual variance on indicator X2 at T1
bf06_35_t1 ~~ res3*bf06_35_t1   # This allows residual variance on indicator X3 at T1
bf06_50_t1 ~~ res4*bf06_50_t1   # This allows residual variance on indicator X4 at T1

bf06_05_t2 ~~ res1*bf06_05_t2  # This allows residual variance on indicator X1 at T2 
bf06_20_t2 ~~ res2*bf06_20_t2  # This allows residual variance on indicator X2 at T2 
bf06_35_t2 ~~ res3*bf06_35_t2  # This allows residual variance on indicator X3 at T2
bf06_50_t2 ~~ res4*bf06_50_t2  # This allows residual variance on indicator X4 at T2

bf06_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf06_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf06_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf06_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf06_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf06_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf06_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf06_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'

fit_mi_lcs_aesth_ideal_hyp4 <- lavaan(mi_lcs_aesth_ideal_hyp4, 
                                     data=df_sbsa2_wide_pers_sb %>% filter(!is.na(bf06_05_t1) & !is.na(bf06_05_t2)), 
                                     estimator='WLSMV', fixed.x=FALSE, ordered="sb06_01_t1") # need to use a different optimizer here!
# This model did not converge properly with FIML and missings. No problem with complete data, though. 
summary(fit_mi_lcs_aesth_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 569 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           289

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                13.819      22.208
  Degrees of freedom                                34          34
  P-value (Chi-square)                           0.999       0.940
  Scaling correction factor                                  1.172
  Shift parameter                                           10.416
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                               684.025     390.308
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.829

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.033       1.035
                                                                  
  Robust Comparative Fit Index (CFI)                            NA
  Robust Tucker-Lewis Index (TLI)                               NA

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.000       0.009
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                                  NA
  90 Percent confidence interval - lower                        NA
  90 Percent confidence interval - upper                        NA
  P-value H_0: Robust RMSEA <= 0.050                            NA
  P-value H_0: Robust RMSEA >= 0.080                            NA

Standardized Root Mean Square Residual:

  SRMR                                           0.026       0.026

Parameter Estimates:

  Standard errors                           Robust.sem
  Information                                 Expected
  Information saturated (h1) model        Unstructured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)  -46.909    1.060  -44.238    0.000   -0.710   -0.698
    b06_35_ (lmb3)  -47.886    1.083  -44.198    0.000   -0.725   -0.773
    b06_50_ (lmb4)  -37.296    0.844  -44.183    0.000   -0.565   -0.509
  aesth_t2 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)  -46.909    1.060  -44.238    0.000   -0.718   -0.702
    b06_35_ (lmb3)  -47.886    1.083  -44.198    0.000   -0.733   -0.777
    b06_50_ (lmb4)  -37.296    0.844  -44.183    0.000   -0.571   -0.513
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.532    0.532

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.989    0.989

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1        -0.000    0.000   -1.737    0.082   -0.248   -0.248
  d_aesth_1 ~~                                                          
    sb06_01_t1        0.001    0.001    1.324    0.186    0.160    0.160
 .bf06_05_t1 ~~                                                         
   .bf06_05_t2        0.936    0.227    4.124    0.000    0.936    0.431
 .bf06_20_t1 ~~                                                         
   .bf06_20_t2        0.191    0.054    3.535    0.000    0.191    0.361
 .bf06_35_t1 ~~                                                         
   .bf06_35_t2       -0.091    0.040   -2.277    0.023   -0.091   -0.257
 .bf06_50_t1 ~~                                                         
   .bf06_50_t2        0.451    0.091    4.955    0.000    0.451    0.496

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1         0.000    0.001    0.011    0.992    0.002    0.002
    aesth_t1          2.935    0.074   39.501    0.000  193.912  193.912
   .bf06_05_1         0.000                               0.000    0.000
   .bf06_20_1 (m2)  141.939    0.361  392.926    0.000  141.939  139.580
   .bf06_35_1 (m3)  144.841    0.369  392.389    0.000  144.841  154.535
   .bf06_50_1 (m4)  113.499    0.288  394.694    0.000  113.499  102.382
   .bf06_05_2         0.000                               0.000    0.000
   .bf06_20_2 (m2)  141.939    0.361  392.926    0.000  141.939  138.827
   .bf06_35_2 (m3)  144.841    0.369  392.389    0.000  144.841  153.514
   .bf06_50_2 (m4)  113.499    0.288  394.694    0.000  113.499  102.087
    sb06_01_1         0.000    0.062    0.000    1.000    0.000    0.000

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1|t1    -1.363                              -1.363   -1.363
    sb06_01_t1|t2    -0.666                              -0.666   -0.666
    sb06_01_t1|t3     0.463                               0.463    0.463
    sb06_01_t1|t4     1.363                               1.363    1.363

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.000    0.000    4.460    0.000    1.000    1.000
    asth_t1           0.000    0.000    7.266    0.000    1.000    1.000
   .b06_05_ (res1)    2.173    0.285    7.624    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.056    9.540    0.000    0.530    0.512
   .b06_35_ (res3)    0.353    0.047    7.523    0.000    0.353    0.402
   .b06_50_ (res4)    0.910    0.097    9.363    0.000    0.910    0.741
   .b06_05_ (res1)    2.173    0.285    7.624    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.056    9.540    0.000    0.530    0.507
   .b06_35_ (res3)    0.353    0.047    7.523    0.000    0.353    0.397
   .b06_50_ (res4)    0.910    0.097    9.363    0.000    0.910    0.736
    s06_01_           1.000    1.000    1.000    0.317    1.000    1.000

Scales y*:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1        1.000                               1.000    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
289 22 NA NA 1 0 0.026
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.532 NA NA
d_aesth_1 ~1 0.000 -0.003 0.003 0.002 0.011 0.992
aesth_t1 ~1 2.935 2.790 3.081 193.912 39.501 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 4.460 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.248 -1.737 0.082
d_aesth_1 ~~ sb06_01_t1 0.001 -0.001 0.003 0.160 1.324 0.186
sb06_01_t1 ~~ sb06_01_t1 1.000 -0.960 2.960 1.000 1.000 0.317
sb06_01_t1 ~1 0.000 -0.121 0.121 0.000 0.000 1.000

Correlation of general change goal with aesthetic change score (ideal-self) is not significantly different from zero, r = 0.16, p = 0.186.

6.4.2.55 Aesthetic - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8165.62 8249.727 1 0.002 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 0.007 -0.011 0.026 0.074 0.768 0.443
aesth_t1 ~1 3.066 2.942 3.190 15.170 48.467 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.227 0.220
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.246 -1.055 0.291
d_aesth_1 ~~ sb07_14_t1 -0.003 -0.020 0.015 -0.026 -0.292 0.771
sb07_14_t1 ~~ sb07_14_t1 0.997 0.907 1.087 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current-self) is not significantly different from zero, r = -0.026, p = 0.771.

6.4.2.56 Aesthetic - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8054.863 8138.97 0.977 0.037 0.058
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.546 NA NA
d_aesth_1 ~1 0.000 -0.002 0.002 0.001 0.011 0.991
aesth_t1 ~1 2.936 2.799 3.072 151.698 42.178 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 2.280 0.023
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.257 -1.439 0.150
d_aesth_1 ~~ sb07_14_t1 -0.001 -0.003 0.001 -0.071 -0.708 0.479
sb07_14_t1 ~~ sb07_14_t1 0.997 0.907 1.087 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.071, p = 0.479.

6.4.2.57 Imagination - current-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7775.936 7860.043 0.962 0.056 0.054
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.025 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.489 NA NA
d_imagi_1 ~1 0.111 0.044 0.178 0.318 3.254 0.001
imagi_t1 ~1 3.644 3.544 3.744 4.978 71.253 0.000
d_imagi_1 ~~ d_imagi_1 0.122 0.045 0.199 1.000 3.118 0.002
imagi_t1 ~~ d_imagi_1 -0.074 -0.139 -0.008 -0.288 -2.198 0.028
d_imagi_1 ~~ sb06_01_t1 -0.015 -0.079 0.050 -0.042 -0.440 0.660
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with imagination change score (current-self) is not significantly different from zero, r = -0.042, p = 0.66.

6.4.2.58 Imagination - ideal-self: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7240.513 7324.62 0.939 0.048 0.054
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.069 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.743 NA NA
d_imagi_1 ~1 0.021 -0.029 0.071 0.081 0.830 0.407
imagi_t1 ~1 4.611 4.549 4.673 12.173 146.025 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.021 0.118 1.000 2.805 0.005
imagi_t1 ~~ d_imagi_1 -0.044 -0.082 -0.005 -0.438 -2.228 0.026
d_imagi_1 ~~ sb06_01_t1 0.010 -0.033 0.053 0.037 0.447 0.655
sb06_01_t1 ~~ sb06_01_t1 0.997 0.855 1.139 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general change goal with imagination change score (ideal-self) is not significantly different from zero, r = 0.037, p = 0.655.

6.4.2.59 Imagination - current-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7772.585 7856.692 0.915 0.085 0.098
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.044 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.512 NA NA
d_imagi_1 ~1 0.112 0.046 0.179 0.314 3.319 0.001
imagi_t1 ~1 3.644 3.544 3.745 4.996 71.264 0.000
d_imagi_1 ~~ d_imagi_1 0.128 0.051 0.205 1.000 3.239 0.001
imagi_t1 ~~ d_imagi_1 -0.086 -0.154 -0.018 -0.329 -2.488 0.013
d_imagi_1 ~~ sb07_15_t1 -0.062 -0.127 0.003 -0.174 -1.878 0.060
sb07_15_t1 ~~ sb07_15_t1 0.997 0.908 1.086 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (current-self) is not significantly different from zero, r = -0.174, p = 0.06.

6.4.2.60 Imagination - ideal-self: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7240.519 7324.626 0.892 0.065 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA
d_imagi_1 ~1 0.022 -0.028 0.072 0.083 0.853 0.394
imagi_t1 ~1 4.611 4.549 4.673 12.160 146.023 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.021 0.118 1.000 2.793 0.005
imagi_t1 ~~ d_imagi_1 -0.043 -0.082 -0.005 -0.435 -2.211 0.027
d_imagi_1 ~~ sb07_15_t1 -0.010 -0.054 0.034 -0.038 -0.443 0.658
sb07_15_t1 ~~ sb07_15_t1 0.997 0.908 1.086 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.038, p = 0.658.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general -0.026 -0.088 -1.090 0.276
extraversion ideal general 0.002 0.009 0.094 0.925
extraversion current specific -0.036 -0.235 -1.264 0.206
extraversion ideal specific 0.012 0.113 0.812 0.417
agreeableness current general 0.022 0.110 1.383 0.167
agreeableness ideal general 0.009 0.032 0.438 0.662
agreeableness current specific -0.010 -0.072 -0.728 0.467
agreeableness ideal specific -0.003 -0.014 -0.150 0.880
conscientiousness current general 0.022 0.053 0.619 0.536
conscientiousness ideal general 0.011 0.043 0.538 0.590
conscientiousness current specific -0.073 -0.213 -2.365 0.018
conscientiousness ideal specific -0.023 -0.113 -1.255 0.209
neuroticism current general -0.004 -0.009 -0.123 0.902
neuroticism ideal general -0.045 -0.122 -1.665 0.096
neuroticism current specific 0.089 0.248 3.053 0.002
neuroticism ideal specific 0.018 0.068 0.847 0.397
openness current general -0.016 -0.059 -0.692 0.489
openness ideal general 0.002 0.017 0.197 0.844
openness current specific -0.021 -0.130 -1.392 0.164
openness ideal specific -0.002 -0.017 -0.177 0.860

Two covariances/correlations that significantly differ from zero:
- Changes in current-level conscientiousness covary with the specific trait goals (latent factor of the three C facets).
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general -0.025 -0.065 -0.796 0.426
sociability ideal general 0.042 0.153 1.531 0.126
sociability current specific -0.082 -0.203 -2.128 0.033
sociability ideal specific -0.033 -0.126 -1.224 0.221
assertiveness current general -0.019 -0.069 -0.848 0.397
assertiveness ideal general -0.013 -0.067 -0.629 0.530
assertiveness current specific -0.052 -0.189 -2.134 0.033
assertiveness ideal specific 0.008 0.039 0.405 0.686
energy current general -0.016 -0.103 -0.976 0.329
energy ideal general 0.000 -0.001 -0.008 0.993
energy current specific 0.001 0.007 0.074 0.941
energy ideal specific -0.002 -0.016 -0.153 0.879
compassion current general 0.026 0.109 1.014 0.311
compassion ideal general -0.029 -0.131 -1.012 0.312
compassion current specific -0.008 -0.031 -0.264 0.792
compassion ideal specific 0.013 0.060 0.403 0.687
respectfulness current general 0.000 0.001 0.013 0.990
respectfulness ideal general 0.008 0.036 0.367 0.714
respectfulness current specific -0.049 -0.150 -1.915 0.056
respectfulness ideal specific -0.037 -0.151 -1.591 0.112
trust current general 0.035 0.118 1.089 0.276
trust ideal general 0.006 0.045 0.260 0.795
trust current specific 0.025 0.082 0.739 0.460
trust ideal specific 0.024 0.182 1.019 0.308
organization current general 0.007 0.015 0.163 0.871
organization ideal general -0.004 -0.016 -0.165 0.869
organization current specific -0.094 -0.190 -1.890 0.059
organization ideal specific -0.033 -0.115 -1.133 0.257
productiveness current general 0.004 0.007 0.075 0.940
productiveness ideal general 0.021 0.082 0.856 0.392
productiveness current specific -0.146 -0.224 -2.677 0.007
productiveness ideal specific -0.029 -0.118 -1.415 0.157
responsibility current general 0.011 0.044 0.457 0.648
responsibility ideal general 0.015 0.079 0.800 0.424
responsibility current specific -0.044 -0.161 -1.683 0.092
responsibility ideal specific -0.007 -0.035 -0.346 0.729
anxiety current general -0.020 -0.048 -0.419 0.675
anxiety ideal general -0.046 -0.180 -1.907 0.056
anxiety current specific 0.016 0.037 0.319 0.750
anxiety ideal specific -0.014 -0.055 -0.677 0.499
depression current general 0.027 0.072 0.841 0.400
depression ideal general -0.016 -0.064 -0.822 0.411
depression current specific 0.136 0.314 3.386 0.001
depression ideal specific 0.013 0.054 0.811 0.417
volatility current general 0.015 0.026 0.354 0.724
volatility ideal general -0.031 -0.097 -1.101 0.271
volatility current specific 0.096 0.162 2.071 0.038
volatility ideal specific 0.029 0.094 1.005 0.315
curiosity current general -0.007 -0.036 -0.316 0.752
curiosity ideal general 0.026 0.189 1.322 0.186
curiosity current specific 0.015 0.082 0.608 0.543
curiosity ideal specific -0.001 -0.004 -0.027 0.978
aesthetic current general -0.018 -0.185 -1.735 0.083
aesthetic ideal general 0.001 0.160 1.324 0.186
aesthetic current specific -0.003 -0.026 -0.292 0.771
aesthetic ideal specific -0.001 -0.071 -0.708 0.479
imagination current general -0.015 -0.042 -0.440 0.660
imagination ideal general 0.010 0.037 0.447 0.655
imagination current specific -0.062 -0.174 -1.878 0.060
imagination ideal specific -0.010 -0.038 -0.443 0.658

Looking at the facets, we see five covariances that significantly differ from zero (at p < .05):
- For sociability and assertiveness, changes in the current-level the specific facet change goal (both effects barely significant and in unexpected direction).
- For productiveness, changes in the current-level the specific facet change goal.
- Changes in current-level depression and volatility covary with the respective specific facet change goal.

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H7 in prereg / H3 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal-self ratings but not change in current-self ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sa <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa <- df_sbsa2_wide_pers_sa %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa)

# follow-up, from T2 to T3 (for later)
df_sbsa2_wide_pers_sa_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_fu <- df_sbsa2_wide_pers_sa_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa)

df_sbsa2_wide_pers_sa_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_fu)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4459.168 4527.876 0.992 0.041 0.043
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.025 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.449 NA NA
d_extra_1 ~1 0.089 0.045 0.134 0.342 3.955 0.000
extra_t1 ~1 3.032 2.944 3.119 5.092 67.772 0.000
d_extra_1 ~~ d_extra_1 0.068 0.035 0.101 1.000 3.985 0.000
extra_t1 ~~ d_extra_1 -0.043 -0.070 -0.015 -0.274 -3.021 0.003
d_extra_1 ~~ sa06_01_t1 0.009 -0.031 0.049 0.035 0.446 0.656
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

The correlation of general acceptance goal with the extraversion change score (current-self) is not significantly different from zero, r = 0.035, p = 0.656.

6.5.1.2 Extraversion - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3930.006 3998.714 0.96 0.06 0.071
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.993 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.646 NA NA
d_extra_1 ~1 -0.019 -0.068 0.031 -0.072 -0.737 0.461
extra_t1 ~1 3.689 3.625 3.752 9.261 113.383 0.000
d_extra_1 ~~ d_extra_1 0.067 0.027 0.108 1.000 3.253 0.001
extra_t1 ~~ d_extra_1 -0.032 -0.057 -0.008 -0.315 -2.561 0.010
d_extra_1 ~~ sa06_01_t1 0.018 -0.027 0.063 0.070 0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with extraversion change score (ideal-self) is not significantly different from zero, r = 0.07, p = 0.437.

6.5.1.3 Extraversion - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6278.21 6373.638 0.919 0.107 0.155
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.048 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.472 NA NA
d_extra_1 ~1 0.089 0.045 0.133 0.333 3.958 0.000
extra_t1 ~1 3.032 2.944 3.119 5.098 67.832 0.000
d_extra_1 ~~ d_extra_1 0.072 0.036 0.108 1.000 3.913 0.000
extra_t1 ~~ d_extra_1 -0.052 -0.082 -0.022 -0.325 -3.396 0.001
goals ~~ d_extra_1 -0.026 -0.068 0.017 -0.147 -1.181 0.237
goals ~~ goals 0.421 0.204 0.638 1.000 3.799 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current-self) is not significantly different from zero, r = -0.147, p = 0.237.

6.5.1.4 Extraversion - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5751.142 5846.57 0.994 0.019 0.045
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA
d_extra_1 ~1 -0.019 -0.069 0.030 -0.075 -0.765 0.444
extra_t1 ~1 3.689 3.625 3.753 9.207 113.364 0.000
d_extra_1 ~~ d_extra_1 0.067 0.026 0.107 1.000 3.213 0.001
extra_t1 ~~ d_extra_1 -0.031 -0.056 -0.006 -0.298 -2.441 0.015
goals ~~ d_extra_1 -0.008 -0.043 0.027 -0.048 -0.443 0.658
goals ~~ goals 0.411 0.194 0.627 1.000 3.723 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal-self) is not significantly different from zero, r = -0.048, p = 0.658.

6.5.1.5 Agreeableness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3802.655 3871.363 0.996 0.023 0.034
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.965 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.520 NA NA
d_agree_1 ~1 0.026 -0.009 0.061 0.128 1.447 0.148
agree_t1 ~1 3.461 3.398 3.524 9.256 107.763 0.000
d_agree_1 ~~ d_agree_1 0.041 0.010 0.071 1.000 2.592 0.010
agree_t1 ~~ d_agree_1 -0.015 -0.033 0.002 -0.202 -1.691 0.091
d_agree_1 ~~ sa06_01_t1 -0.009 -0.036 0.019 -0.042 -0.605 0.545
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with agreeableness change score (current-self) is not significantly different from zero, r = -0.042, p = 0.545.

6.5.1.6 Agreeableness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3794.484 3863.192 0.99 0.039 0.046
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.621 NA NA
d_agree_1 ~1 0.006 -0.037 0.050 0.023 0.291 0.771
agree_t1 ~1 3.778 3.705 3.851 8.441 101.667 0.000
d_agree_1 ~~ d_agree_1 0.076 0.042 0.109 1.000 4.471 0.000
agree_t1 ~~ d_agree_1 -0.040 -0.065 -0.015 -0.326 -3.193 0.001
d_agree_1 ~~ sa06_01_t1 0.000 -0.041 0.040 -0.001 -0.020 0.984
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.001, p = 0.984.

6.5.1.7 Agreeableness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5420.421 5515.849 0.967 0.061 0.084
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.000 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.563 NA NA
d_agree_1 ~1 0.024 -0.010 0.058 0.115 1.363 0.173
agree_t1 ~1 3.462 3.399 3.525 9.401 107.744 0.000
d_agree_1 ~~ d_agree_1 0.043 0.011 0.075 1.000 2.595 0.009
agree_t1 ~~ d_agree_1 -0.021 -0.040 -0.003 -0.281 -2.230 0.026
goals ~~ d_agree_1 -0.041 -0.075 -0.007 -0.296 -2.392 0.017
goals ~~ goals 0.453 0.311 0.595 1.000 6.262 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current-self) is significantly different from zero, r = -0.296, p = 0.017.

6.5.1.8 Agreeableness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5423.04 5518.467 0.987 0.04 0.052
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.018 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.630 NA NA
d_agree_1 ~1 0.006 -0.038 0.049 0.021 0.259 0.795
agree_t1 ~1 3.778 3.705 3.851 8.461 101.680 0.000
d_agree_1 ~~ d_agree_1 0.076 0.043 0.110 1.000 4.455 0.000
agree_t1 ~~ d_agree_1 -0.042 -0.067 -0.017 -0.337 -3.253 0.001
goals ~~ d_agree_1 -0.017 -0.048 0.014 -0.094 -1.087 0.277
goals ~~ goals 0.435 0.278 0.593 1.000 5.417 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal-self) is not significantly different from zero, r = -0.094, p = 0.277.

6.5.1.9 Conscientiousness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4049.235 4117.943 0.997 0.026 0.032
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.986 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.514 NA NA
d_consc_1 ~1 0.074 0.024 0.124 0.213 2.884 0.004
consc_t1 ~1 3.380 3.299 3.461 5.058 81.598 0.000
d_consc_1 ~~ d_consc_1 0.121 0.081 0.162 1.000 5.857 0.000
consc_t1 ~~ d_consc_1 -0.054 -0.087 -0.022 -0.234 -3.243 0.001
d_consc_1 ~~ sa06_01_t1 -0.035 -0.084 0.013 -0.101 -1.418 0.156
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with conscientiousness change score (current-self) is not significantly different from zero, r = -0.101, p = 0.156.

6.5.1.10 Conscientiousness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3374.4 3443.108 0.994 0.031 0.041
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.036 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.027 -0.019 0.073 0.086 1.164 0.244
consc_t1 ~1 4.339 4.279 4.400 9.869 141.201 0.000
d_consc_1 ~~ d_consc_1 0.100 0.059 0.141 1.000 4.754 0.000
consc_t1 ~~ d_consc_1 -0.056 -0.085 -0.028 -0.407 -3.874 0.000
d_consc_1 ~~ sa06_01_t1 0.019 -0.017 0.054 0.060 1.044 0.297
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with conscientiousness change score (ideal-self) is not significantly different from zero, r = 0.06, p = 0.297.

6.5.1.11 Conscientiousness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5674.857 5770.285 0.921 0.125 0.214
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.018 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.548 NA NA
d_consc_1 ~1 0.074 0.023 0.124 0.205 2.867 0.004
consc_t1 ~1 3.380 3.299 3.461 5.051 81.584 0.000
d_consc_1 ~~ d_consc_1 0.130 0.087 0.173 1.000 5.911 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.113 -0.032 -0.301 -3.503 0.000
goals ~~ d_consc_1 -0.043 -0.092 0.006 -0.159 -1.707 0.088
goals ~~ goals 0.555 0.411 0.699 1.000 7.563 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is not significantly different from zero, r = -0.159, p = 0.088.

6.5.1.12 Conscientiousness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 4997.976 5093.404 1 0 0.032
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.026 -0.020 0.072 0.081 1.097 0.273
consc_t1 ~1 4.339 4.279 4.400 9.859 141.196 0.000
d_consc_1 ~~ d_consc_1 0.100 0.058 0.141 1.000 4.716 0.000
consc_t1 ~~ d_consc_1 -0.057 -0.085 -0.028 -0.407 -3.878 0.000
goals ~~ d_consc_1 -0.035 -0.068 -0.001 -0.148 -2.036 0.042
goals ~~ goals 0.547 0.404 0.690 1.000 7.475 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is (barely) significantly different from zero, r = -0.148, p = 0.042.

6.5.1.13 Neuroticism - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4258.931 4327.639 0.996 0.033 0.077
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.985 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.458 NA NA
d_neuro_1 ~1 -0.177 -0.232 -0.122 -0.476 -6.305 0.000
neuro_t1 ~1 3.250 3.158 3.342 4.068 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.138 0.092 0.184 1.000 5.915 0.000
neuro_t1 ~~ d_neuro_1 -0.059 -0.101 -0.018 -0.199 -2.802 0.005
d_neuro_1 ~~ sa06_01_t1 -0.026 -0.073 0.021 -0.070 -1.082 0.279
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with neuroticism change score (current-self) is not significantly different from zero, r = -0.07, p = 0.279.

6.5.1.14 Neuroticism - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3588.731 3657.439 0.987 0.042 0.06
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.705 NA NA
d_neuro_1 ~1 -0.007 -0.062 0.049 -0.019 -0.232 0.817
neuro_t1 ~1 1.751 1.685 1.818 3.285 51.768 0.000
d_neuro_1 ~~ d_neuro_1 0.123 0.064 0.182 1.000 4.091 0.000
neuro_t1 ~~ d_neuro_1 -0.080 -0.127 -0.033 -0.427 -3.334 0.001
d_neuro_1 ~~ sa06_01_t1 -0.018 -0.069 0.033 -0.050 -0.681 0.496
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with neuroticism change score (ideal-self) is not significantly different from zero, r = -0.05, p = 0.496.

6.5.1.15 Neuroticism - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5909.586 6005.014 0.955 0.097 0.184
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.021 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.492 NA NA
d_neuro_1 ~1 -0.177 -0.232 -0.123 -0.461 -6.358 0.000
neuro_t1 ~1 3.250 3.158 3.343 4.069 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.148 0.098 0.198 1.000 5.846 0.000
neuro_t1 ~~ d_neuro_1 -0.087 -0.135 -0.039 -0.283 -3.567 0.000
goals ~~ d_neuro_1 0.045 0.003 0.087 0.178 2.121 0.034
goals ~~ goals 0.439 0.290 0.588 1.000 5.774 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current-self) is (barely) significantly different from zero, r = 0.178, p = 0.034.

6.5.1.16 Neuroticism - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5243.659 5339.087 0.99 0.033 0.051
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA
d_neuro_1 ~1 -0.006 -0.062 0.049 -0.018 -0.227 0.820
neuro_t1 ~1 1.751 1.685 1.818 3.282 51.764 0.000
d_neuro_1 ~~ d_neuro_1 0.122 0.063 0.181 1.000 4.046 0.000
neuro_t1 ~~ d_neuro_1 -0.078 -0.125 -0.031 -0.420 -3.255 0.001
goals ~~ d_neuro_1 0.002 -0.032 0.036 0.009 0.116 0.908
goals ~~ goals 0.443 0.291 0.594 1.000 5.732 0.000

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, r = 0.009, p = 0.908.

6.5.1.17 Openness - current-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3956.354 4025.062 1 0 0.031
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.018 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.405 NA NA
d_openn_1 ~1 0.076 0.033 0.119 0.318 3.442 0.001
openn_t1 ~1 3.564 3.489 3.639 5.935 93.254 0.000
d_openn_1 ~~ d_openn_1 0.057 0.026 0.089 1.000 3.544 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.060 -0.010 -0.244 -2.727 0.006
d_openn_1 ~~ sa06_01_t1 -0.016 -0.054 0.023 -0.065 -0.794 0.427
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (current-self) is not significantly different from zero, r = -0.065, p = 0.427.

6.5.1.18 Openness - ideal-self: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing="fiml")
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3857.64 3926.348 0.968 0.063 0.063
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.711 NA NA
d_openn_1 ~1 0.015 -0.018 0.047 0.070 0.895 0.371
openn_t1 ~1 3.907 3.848 3.966 12.679 130.315 0.000
d_openn_1 ~~ d_openn_1 0.045 0.019 0.071 1.000 3.437 0.001
openn_t1 ~~ d_openn_1 -0.025 -0.043 -0.008 -0.390 -2.858 0.004
d_openn_1 ~~ sa06_01_t1 -0.028 -0.056 0.000 -0.132 -1.941 0.052
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (ideal-self) is not significantly different from zero, r = -0.132, p = 0.052.

6.5.1.19 Openness - current-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5429.067 5524.495 0.95 0.096 0.185
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.042 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.428 NA NA
d_openn_1 ~1 0.076 0.032 0.119 0.307 3.429 0.001
openn_t1 ~1 3.564 3.489 3.639 5.937 93.257 0.000
d_openn_1 ~~ d_openn_1 0.061 0.027 0.094 1.000 3.556 0.000
openn_t1 ~~ d_openn_1 -0.045 -0.075 -0.014 -0.301 -2.892 0.004
goals ~~ d_openn_1 -0.018 -0.051 0.014 -0.126 -1.099 0.272
goals ~~ goals 0.346 0.221 0.471 1.000 5.436 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current-self) is not significantly different from zero, r = -0.126, p = 0.272.

6.5.1.20 Openness - ideal-self: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing = "fiml")
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5331.326 5426.754 0.96 0.069 0.107
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.069 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.769 NA NA
d_openn_1 ~1 0.015 -0.018 0.047 0.066 0.886 0.376
openn_t1 ~1 3.907 3.848 3.966 12.792 130.356 0.000
d_openn_1 ~~ d_openn_1 0.048 0.021 0.076 1.000 3.432 0.001
openn_t1 ~~ d_openn_1 -0.030 -0.049 -0.011 -0.447 -3.118 0.002
goals ~~ d_openn_1 -0.018 -0.035 -0.001 -0.140 -2.101 0.036
goals ~~ goals 0.347 0.222 0.471 1.000 5.454 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal-self) is (barely) significantly different from zero, r = -0.14, p = 0.036.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7800.447 7884.424 0.953 0.078 0.05
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.073 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.162 0.078 0.245 0.372 3.798 0.000
socia_t1 ~1 2.858 2.724 2.992 2.912 41.737 0.000
d_socia_1 ~~ d_socia_1 0.189 0.101 0.277 1.000 4.199 0.000
socia_t1 ~~ d_socia_1 -0.157 -0.233 -0.082 -0.369 -4.078 0.000
d_socia_1 ~~ sa06_01_t1 0.036 -0.044 0.117 0.083 0.879 0.379
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

The correlation of the general acceptance goal with the sociability change score (current-self) is not significantly different from zero, r = 0.083, p = 0.379.

6.5.2.2 Sociability - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7864.423 7948.4 0.88 0.064 0.071
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 -0.061 -0.121 -0.002 -0.330 -2.009 0.044
socia_t1 ~1 4.226 4.145 4.306 12.175 102.770 0.000
d_socia_1 ~~ d_socia_1 0.034 -0.021 0.090 1.000 1.215 0.224
socia_t1 ~~ d_socia_1 -0.001 -0.033 0.031 -0.015 -0.061 0.951
d_socia_1 ~~ sa06_01_t1 -0.022 -0.080 0.036 -0.118 -0.742 0.458
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with sociability change score (ideal-self) is not significantly different from zero, r = -0.118, p = 0.458.

6.5.2.3 Sociability - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7799.893 7883.87 0.907 0.112 0.136
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.099 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA
d_socia_1 ~1 0.160 0.077 0.242 0.355 3.774 0.000
socia_t1 ~1 2.858 2.724 2.993 2.919 41.771 0.000
d_socia_1 ~~ d_socia_1 0.202 0.108 0.296 1.000 4.217 0.000
socia_t1 ~~ d_socia_1 -0.184 -0.268 -0.100 -0.417 -4.278 0.000
d_socia_1 ~~ sa07_01_t1 -0.049 -0.123 0.026 -0.108 -1.284 0.199
sa07_01_t1 ~~ sa07_01_t1 0.997 0.892 1.102 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current-self) is not significantly different from zero, r = -0.108, p = 0.199.

6.5.2.4 Sociability - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7861.727 7945.704 0.922 0.051 0.06
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.468 NA NA
d_socia_1 ~1 -0.060 -0.118 -0.001 -0.328 -1.991 0.046
socia_t1 ~1 4.225 4.144 4.305 12.225 102.942 0.000
d_socia_1 ~~ d_socia_1 0.033 -0.021 0.088 1.000 1.192 0.233
socia_t1 ~~ d_socia_1 -0.001 -0.031 0.030 -0.010 -0.041 0.967
d_socia_1 ~~ sa07_01_t1 -0.043 -0.092 0.005 -0.239 -1.742 0.082
sa07_01_t1 ~~ sa07_01_t1 0.997 0.892 1.102 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = -0.239, p = 0.082.

6.5.2.5 Assertiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7913.978 7997.955 0.992 0.028 0.035
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.373 NA NA
d_asser_1 ~1 0.053 -0.003 0.110 0.204 1.849 0.065
asser_t1 ~1 3.105 2.986 3.224 4.442 51.156 0.000
d_asser_1 ~~ d_asser_1 0.069 0.019 0.118 1.000 2.727 0.006
asser_t1 ~~ d_asser_1 -0.033 -0.073 0.008 -0.178 -1.563 0.118
d_asser_1 ~~ sa06_01_t1 -0.011 -0.056 0.035 -0.040 -0.457 0.648
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with assertiveness change score (current-self) is not significantly different from zero, r = -0.04, p = 0.648.

6.5.2.6 Assertiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7794.173 7878.15 0.972 0.033 0.057
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.935 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.435 NA NA
d_asser_1 ~1 -0.024 -0.073 0.024 -0.148 -0.992 0.321
asser_t1 ~1 4.134 4.043 4.224 11.645 89.478 0.000
d_asser_1 ~~ d_asser_1 0.027 -0.013 0.067 1.000 1.340 0.180
asser_t1 ~~ d_asser_1 -0.005 -0.033 0.024 -0.077 -0.308 0.758
d_asser_1 ~~ sa06_01_t1 0.040 -0.003 0.082 0.239 1.826 0.068
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.239, p = 0.068.

6.5.2.7 Assertiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7914.109 7998.086 0.958 0.063 0.087
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.998 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.374 NA NA
d_asser_1 ~1 0.054 -0.003 0.110 0.204 1.864 0.062
asser_t1 ~1 3.105 2.986 3.224 4.433 51.158 0.000
d_asser_1 ~~ d_asser_1 0.069 0.019 0.119 1.000 2.713 0.007
asser_t1 ~~ d_asser_1 -0.033 -0.076 0.009 -0.182 -1.537 0.124
d_asser_1 ~~ sa07_02_t1 -0.005 -0.059 0.050 -0.017 -0.164 0.870
sa07_02_t1 ~~ sa07_02_t1 0.997 0.898 1.096 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current-self) is not significantly different from zero, r = -0.017, p = 0.87.

6.5.2.8 Assertiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7793.151 7877.128 1 0 0.045
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.930 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.436 NA NA
d_asser_1 ~1 -0.025 -0.073 0.023 -0.151 -1.031 0.303
asser_t1 ~1 4.134 4.044 4.225 11.625 89.537 0.000
d_asser_1 ~~ d_asser_1 0.028 -0.012 0.068 1.000 1.366 0.172
asser_t1 ~~ d_asser_1 -0.004 -0.033 0.025 -0.068 -0.273 0.785
d_asser_1 ~~ sa07_02_t1 0.045 -0.004 0.094 0.272 1.817 0.069
sa07_02_t1 ~~ sa07_02_t1 0.997 0.898 1.096 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal-self) is not significantly different from zero, r = 0.272, p = 0.069.

6.5.2.9 Energy - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8062.016 8145.992 0.971 0.047 0.055
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA
d_energ_1 ~1 0.047 0.007 0.086 0.256 2.322 0.020
energ_t1 ~1 3.324 3.212 3.437 8.682 57.901 0.000
d_energ_1 ~~ d_energ_1 0.034 0.001 0.066 1.000 2.022 0.043
energ_t1 ~~ d_energ_1 -0.020 -0.040 0.001 -0.279 -1.835 0.067
d_energ_1 ~~ sa06_01_t1 -0.003 -0.030 0.024 -0.018 -0.245 0.806
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with energy change score (current-self) is not significantly different from zero, r = -0.018, p = 0.806.

6.5.2.10 Energy - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7506.116 7590.092 0.891 0.057 0.066
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.009 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.780 NA NA
d_energ_1 ~1 -0.002 -0.034 0.030 -0.011 -0.114 0.909
energ_t1 ~1 3.779 3.662 3.895 17.236 63.551 0.000
d_energ_1 ~~ d_energ_1 0.029 -0.018 0.075 1.000 1.202 0.229
energ_t1 ~~ d_energ_1 -0.015 -0.042 0.012 -0.398 -1.082 0.279
d_energ_1 ~~ sa06_01_t1 0.010 -0.016 0.037 0.062 0.781 0.435
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with energy change score (ideal-self) is not significantly different from zero, r = 0.062, p = 0.435.

6.5.2.11 Energy - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8059.78 8143.756 0.903 0.09 0.113
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.049 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.523 NA NA
d_energ_1 ~1 0.048 0.008 0.087 0.249 2.346 0.019
energ_t1 ~1 3.324 3.211 3.437 8.679 57.888 0.000
d_energ_1 ~~ d_energ_1 0.037 0.001 0.072 1.000 2.032 0.042
energ_t1 ~~ d_energ_1 -0.025 -0.050 0.000 -0.341 -1.929 0.054
d_energ_1 ~~ sa07_03_t1 -0.028 -0.066 0.011 -0.146 -1.415 0.157
sa07_03_t1 ~~ sa07_03_t1 0.997 0.889 1.105 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current-self) is not significantly different from zero, r = -0.146, p = 0.157.

6.5.2.12 Energy - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7506.525 7590.501 0.921 0.048 0.057
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.005 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA
d_energ_1 ~1 -0.002 -0.034 0.030 -0.012 -0.125 0.900
energ_t1 ~1 3.779 3.662 3.895 17.154 63.534 0.000
d_energ_1 ~~ d_energ_1 0.028 -0.018 0.074 1.000 1.210 0.226
energ_t1 ~~ d_energ_1 -0.014 -0.041 0.012 -0.389 -1.083 0.279
d_energ_1 ~~ sa07_03_t1 0.005 -0.021 0.032 0.032 0.398 0.690
sa07_03_t1 ~~ sa07_03_t1 0.997 0.889 1.105 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal-self) is not significantly different from zero, r = 0.032, p = 0.69.

6.5.2.13 Compassion - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7841.336 7925.312 0.972 0.043 0.049
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.892 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.546 NA NA
d_compa_1 ~1 0.050 -0.022 0.123 0.129 1.366 0.172
compa_t1 ~1 4.213 4.123 4.303 6.607 91.772 0.000
d_compa_1 ~~ d_compa_1 0.152 0.047 0.257 1.000 2.829 0.005
compa_t1 ~~ d_compa_1 -0.024 -0.090 0.042 -0.097 -0.713 0.476
d_compa_1 ~~ sa06_01_t1 -0.043 -0.112 0.025 -0.111 -1.236 0.216
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with compassion change score (current-self) is not significantly different from zero, r = -0.111, p = 0.216.

6.5.2.14 Compassion - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8110.185 8194.161 0.971 0.034 0.048
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA
d_compa_1 ~1 0.019 -0.064 0.102 0.053 0.457 0.648
compa_t1 ~1 4.291 4.196 4.385 6.936 89.023 0.000
d_compa_1 ~~ d_compa_1 0.135 0.021 0.249 1.000 2.315 0.021
compa_t1 ~~ d_compa_1 -0.073 -0.151 0.004 -0.323 -1.856 0.064
d_compa_1 ~~ sa06_01_t1 -0.005 -0.077 0.067 -0.014 -0.138 0.890
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with compassion change score (ideal-self) is not significantly different from zero, r = -0.014, p = 0.89.

6.5.2.15 Compassion - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7836.459 7920.435 0.942 0.063 0.076
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.919 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.586 NA NA
d_compa_1 ~1 0.046 -0.027 0.120 0.113 1.236 0.217
compa_t1 ~1 4.213 4.123 4.303 6.578 91.771 0.000
d_compa_1 ~~ d_compa_1 0.166 0.052 0.281 1.000 2.843 0.004
compa_t1 ~~ d_compa_1 -0.046 -0.117 0.026 -0.175 -1.255 0.210
d_compa_1 ~~ sa07_04_t1 -0.092 -0.180 -0.004 -0.226 -2.053 0.040
sa07_04_t1 ~~ sa07_04_t1 0.997 0.893 1.101 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current-self) is (barely) significantly different from zero, r = -0.226, p = 0.04.

6.5.2.16 Compassion - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8109.003 8192.979 0.945 0.047 0.058
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.025 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.623 NA NA
d_compa_1 ~1 0.017 -0.066 0.101 0.046 0.410 0.682
compa_t1 ~1 4.291 4.196 4.385 6.934 88.972 0.000
d_compa_1 ~~ d_compa_1 0.142 0.026 0.258 1.000 2.393 0.017
compa_t1 ~~ d_compa_1 -0.080 -0.159 -0.001 -0.344 -1.993 0.046
d_compa_1 ~~ sa07_04_t1 -0.042 -0.121 0.037 -0.111 -1.036 0.300
sa07_04_t1 ~~ sa07_04_t1 0.997 0.893 1.101 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal-self) is not significantly different from zero, r = -0.111, p = 0.3.

6.5.2.17 Respectfulness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6832.918 6916.894 0.958 0.056 0.059
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.024 -0.034 0.082 0.072 0.804 0.421
respe_t1 ~1 4.444 4.374 4.514 8.449 124.133 0.000
d_respe_1 ~~ d_respe_1 0.110 0.030 0.191 1.000 2.680 0.007
respe_t1 ~~ d_respe_1 -0.054 -0.105 -0.003 -0.309 -2.069 0.039
d_respe_1 ~~ sa06_01_t1 -0.007 -0.054 0.040 -0.022 -0.308 0.758
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with respectfulness change score (current-self) is not significantly different from zero, r = -0.022, p = 0.758.

6.5.2.18 Respectfulness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6291.764 6375.74 0.932 0.065 0.061
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.386 NA NA
d_respe_1 ~1 -0.001 -0.042 0.040 -0.005 -0.035 0.972
respe_t1 ~1 4.625 4.560 4.690 12.258 139.827 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.006 0.049 1.000 1.536 0.125
respe_t1 ~~ d_respe_1 -0.010 -0.036 0.016 -0.184 -0.761 0.447
d_respe_1 ~~ sa06_01_t1 -0.004 -0.044 0.036 -0.029 -0.209 0.834
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.029, p = 0.834.

6.5.2.19 Respectfulness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6804.501 6888.477 0.929 0.076 0.1
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.065 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.742 NA NA
d_respe_1 ~1 0.021 -0.037 0.079 0.058 0.716 0.474
respe_t1 ~1 4.444 4.373 4.514 8.442 124.033 0.000
d_respe_1 ~~ d_respe_1 0.134 0.041 0.228 1.000 2.808 0.005
respe_t1 ~~ d_respe_1 -0.084 -0.139 -0.028 -0.433 -2.969 0.003
d_respe_1 ~~ sa07_05_t1 -0.147 -0.223 -0.072 -0.402 -3.818 0.000
sa07_05_t1 ~~ sa07_05_t1 0.997 0.842 1.152 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current-self) is significantly different from zero, r = -0.402, p = 0.

6.5.2.20 Respectfulness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6290.466 6374.443 0.905 0.078 0.066
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.004 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.398 NA NA
d_respe_1 ~1 -0.001 -0.043 0.040 -0.009 -0.063 0.950
respe_t1 ~1 4.625 4.560 4.690 12.144 139.684 0.000
d_respe_1 ~~ d_respe_1 0.023 -0.006 0.052 1.000 1.545 0.122
respe_t1 ~~ d_respe_1 -0.012 -0.039 0.015 -0.209 -0.867 0.386
d_respe_1 ~~ sa07_05_t1 -0.023 -0.069 0.023 -0.152 -0.984 0.325
sa07_05_t1 ~~ sa07_05_t1 0.997 0.842 1.152 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal-self) is not significantly different from zero, r = -0.152, p = 0.325.

6.5.2.21 Trust - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8120.247 8204.224 0.97 0.046 0.052
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.313 NA NA
d_trust_1 ~1 0.096 0.026 0.165 0.445 2.691 0.007
trust_t1 ~1 3.150 3.032 3.268 4.415 52.426 0.000
d_trust_1 ~~ d_trust_1 0.046 -0.027 0.120 1.000 1.231 0.218
trust_t1 ~~ d_trust_1 -0.042 -0.101 0.018 -0.271 -1.364 0.173
d_trust_1 ~~ sa06_01_t1 0.008 -0.048 0.065 0.038 0.283 0.777
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with trust change score (current-self) is not significantly different from zero, r = 0.038, p = 0.777.

6.5.2.22 Trust - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7834.982 7918.959 0.967 0.037 0.044
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.597 NA NA
d_trust_1 ~1 0.014 -0.048 0.076 0.052 0.455 0.649
trust_t1 ~1 4.054 3.955 4.153 7.932 80.303 0.000
d_trust_1 ~~ d_trust_1 0.076 0.005 0.147 1.000 2.108 0.035
trust_t1 ~~ d_trust_1 -0.062 -0.107 -0.017 -0.440 -2.706 0.007
d_trust_1 ~~ sa06_01_t1 0.009 -0.040 0.059 0.034 0.371 0.710
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with trust change score (ideal-self) is not significantly different from zero, r = 0.034, p = 0.71.

6.5.2.23 Trust - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8118.894 8202.871 0.944 0.064 0.075
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.296 NA NA
d_trust_1 ~1 0.096 0.026 0.165 0.463 2.689 0.007
trust_t1 ~1 3.150 3.032 3.268 4.402 52.402 0.000
d_trust_1 ~~ d_trust_1 0.043 -0.030 0.116 1.000 1.150 0.250
trust_t1 ~~ d_trust_1 -0.034 -0.094 0.026 -0.229 -1.111 0.267
d_trust_1 ~~ sa07_06_t1 0.040 -0.031 0.110 0.193 1.108 0.268
sa07_06_t1 ~~ sa07_06_t1 0.997 0.893 1.101 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current-self) is not significantly different from zero, r = 0.193, p = 0.268.

6.5.2.24 Trust - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7834.687 7918.663 0.967 0.037 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.595 NA NA
d_trust_1 ~1 0.014 -0.048 0.076 0.052 0.450 0.653
trust_t1 ~1 4.054 3.955 4.153 7.959 80.332 0.000
d_trust_1 ~~ d_trust_1 0.075 0.004 0.146 1.000 2.080 0.038
trust_t1 ~~ d_trust_1 -0.061 -0.106 -0.016 -0.439 -2.677 0.007
d_trust_1 ~~ sa07_06_t1 0.018 -0.038 0.074 0.066 0.629 0.529
sa07_06_t1 ~~ sa07_06_t1 0.997 0.893 1.101 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal-self) is not significantly different from zero, r = 0.066, p = 0.529.

6.5.2.25 Organization - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7778.247 7862.224 1 0 0.022
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA
d_organ_1 ~1 0.064 -0.017 0.145 0.138 1.554 0.120
organ_t1 ~1 3.037 2.902 3.172 3.313 44.122 0.000
d_organ_1 ~~ d_organ_1 0.216 0.110 0.323 1.000 3.985 0.000
organ_t1 ~~ d_organ_1 -0.110 -0.192 -0.028 -0.259 -2.638 0.008
d_organ_1 ~~ sa06_01_t1 -0.083 -0.158 -0.007 -0.178 -2.143 0.032
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with organization change score (current-self) is (barely) significantly different from zero, r = -0.178, p = 0.032.

6.5.2.26 Organization - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6764.813 6848.79 0.979 0.028 0.049
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.971 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.603 NA NA
d_organ_1 ~1 0.005 -0.051 0.062 0.020 0.182 0.856
organ_t1 ~1 4.246 4.143 4.349 10.044 81.011 0.000
d_organ_1 ~~ d_organ_1 0.069 0.009 0.129 1.000 2.243 0.025
organ_t1 ~~ d_organ_1 -0.029 -0.079 0.020 -0.262 -1.154 0.249
d_organ_1 ~~ sa06_01_t1 -0.003 -0.051 0.044 -0.013 -0.139 0.889
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with organization change score (ideal-self) is not significantly different from zero, r = -0.013, p = 0.889.

6.5.2.27 Organization - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7772.127 7856.103 0.919 0.096 0.143
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.073 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.601 NA NA
d_organ_1 ~1 0.067 -0.014 0.148 0.129 1.611 0.107
organ_t1 ~1 3.036 2.902 3.171 3.285 44.090 0.000
d_organ_1 ~~ d_organ_1 0.268 0.140 0.396 1.000 4.104 0.000
organ_t1 ~~ d_organ_1 -0.190 -0.294 -0.086 -0.397 -3.594 0.000
d_organ_1 ~~ sa07_07_t1 -0.148 -0.235 -0.061 -0.286 -3.323 0.001
sa07_07_t1 ~~ sa07_07_t1 0.997 0.910 1.084 1.000 22.344 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current-self) is significantly different from zero, r = -0.286, p = 0.001.

6.5.2.28 Organization - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6762.972 6846.948 0.98 0.027 0.046
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.973 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.607 NA NA
d_organ_1 ~1 0.005 -0.052 0.062 0.019 0.175 0.861
organ_t1 ~1 4.246 4.143 4.349 10.013 80.979 0.000
d_organ_1 ~~ d_organ_1 0.070 0.009 0.131 1.000 2.242 0.025
organ_t1 ~~ d_organ_1 -0.030 -0.079 0.019 -0.266 -1.193 0.233
d_organ_1 ~~ sa07_07_t1 -0.035 -0.091 0.020 -0.134 -1.259 0.208
sa07_07_t1 ~~ sa07_07_t1 0.997 0.910 1.084 1.000 22.344 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal-self) is not significantly different from zero, r = -0.134, p = 0.208.

6.5.2.29 Productiveness - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7682.118 7766.094 0.965 0.058 0.049
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.544 NA NA
d_produ_1 ~1 0.126 0.052 0.200 0.322 3.352 0.001
produ_t1 ~1 2.572 2.444 2.701 3.699 39.252 0.000
d_produ_1 ~~ d_produ_1 0.154 0.077 0.232 1.000 3.894 0.000
produ_t1 ~~ d_produ_1 -0.058 -0.114 -0.002 -0.212 -2.031 0.042
d_produ_1 ~~ sa06_01_t1 -0.035 -0.097 0.027 -0.090 -1.111 0.267
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with productiveness change score (current-self) is not significantly different from zero, r = -0.09, p = 0.267.

6.5.2.30 Productiveness - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6162.71 6246.687 0.909 0.068 0.069
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.045 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA
d_produ_1 ~1 0.029 -0.017 0.076 0.124 1.241 0.215
produ_t1 ~1 4.415 4.337 4.493 12.001 111.163 0.000
d_produ_1 ~~ d_produ_1 0.056 0.009 0.104 1.000 2.321 0.020
produ_t1 ~~ d_produ_1 -0.034 -0.070 0.003 -0.388 -1.823 0.068
d_produ_1 ~~ sa06_01_t1 0.006 -0.027 0.039 0.027 0.374 0.708
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with productiveness change score (ideal-self) is not significantly different from zero, r = 0.027, p = 0.708.

6.5.2.31 Productiveness - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7679.457 7763.433 0.879 0.113 0.137
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.002 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 0.123 0.049 0.198 0.300 3.256 0.001
produ_t1 ~1 2.572 2.444 2.701 3.707 39.250 0.000
d_produ_1 ~~ d_produ_1 0.169 0.082 0.256 1.000 3.808 0.000
produ_t1 ~~ d_produ_1 -0.085 -0.154 -0.017 -0.299 -2.430 0.015
d_produ_1 ~~ sa07_08_t1 -0.073 -0.151 0.005 -0.177 -1.833 0.067
sa07_08_t1 ~~ sa07_08_t1 0.997 0.897 1.097 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current-self) is not significantly different from zero, r = -0.177, p = 0.067.

6.5.2.32 Productiveness - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6159.374 6243.35 0.911 0.068 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.047 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.677 NA NA
d_produ_1 ~1 0.028 -0.019 0.075 0.117 1.168 0.243
produ_t1 ~1 4.415 4.337 4.493 11.941 111.118 0.000
d_produ_1 ~~ d_produ_1 0.057 0.009 0.105 1.000 2.324 0.020
produ_t1 ~~ d_produ_1 -0.035 -0.071 0.002 -0.391 -1.852 0.064
d_produ_1 ~~ sa07_08_t1 -0.036 -0.076 0.003 -0.153 -1.789 0.074
sa07_08_t1 ~~ sa07_08_t1 0.997 0.897 1.097 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal-self) is not significantly different from zero, r = -0.153, p = 0.074.

6.5.2.33 Responsibility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7780.117 7864.093 0.871 0.104 0.093
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.510 NA NA
d_respo_1 ~1 0.019 -0.017 0.056 0.105 1.044 0.297
respo_t1 ~1 3.659 3.557 3.760 10.024 70.694 0.000
d_respo_1 ~~ d_respo_1 0.033 0.001 0.066 1.000 2.012 0.044
respo_t1 ~~ d_respo_1 -0.019 -0.039 0.001 -0.286 -1.850 0.064
d_respo_1 ~~ sa06_01_t1 -0.011 -0.041 0.020 -0.058 -0.668 0.504
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with responsibility change score (current-self) is not significantly different from zero, r = -0.058, p = 0.504.

6.5.2.34 Responsibility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6981.335 7065.311 0.964 0.044 0.053
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.628 NA NA
d_respo_1 ~1 0.020 -0.035 0.074 0.072 0.714 0.475
respo_t1 ~1 4.238 4.134 4.342 10.536 79.921 0.000
d_respo_1 ~~ d_respo_1 0.076 0.018 0.134 1.000 2.556 0.011
respo_t1 ~~ d_respo_1 -0.023 -0.060 0.015 -0.204 -1.175 0.240
d_respo_1 ~~ sa06_01_t1 0.039 -0.006 0.085 0.143 1.685 0.092
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with responsibility change score (ideal-self) is not significantly different from zero, r = 0.143, p = 0.092.

6.5.2.35 Responsibility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7777.33 7861.307 0.813 0.129 0.136
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.558 NA NA
d_respo_1 ~1 0.020 -0.017 0.056 0.100 1.048 0.295
respo_t1 ~1 3.659 3.557 3.760 9.965 70.676 0.000
d_respo_1 ~~ d_respo_1 0.038 0.001 0.074 1.000 2.039 0.041
respo_t1 ~~ d_respo_1 -0.026 -0.052 0.000 -0.358 -1.927 0.054
d_respo_1 ~~ sa07_09_t1 -0.034 -0.077 0.010 -0.173 -1.505 0.132
sa07_09_t1 ~~ sa07_09_t1 0.997 0.896 1.098 1.000 19.415 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current-self) is not significantly different from zero, r = -0.173, p = 0.132.

6.5.2.36 Responsibility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6981.061 7065.038 0.958 0.047 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.630 NA NA
d_respo_1 ~1 0.017 -0.036 0.070 0.063 0.617 0.537
respo_t1 ~1 4.239 4.135 4.343 10.867 79.965 0.000
d_respo_1 ~~ d_respo_1 0.072 0.016 0.128 1.000 2.515 0.012
respo_t1 ~~ d_respo_1 -0.021 -0.057 0.014 -0.205 -1.193 0.233
d_respo_1 ~~ sa07_09_t1 -0.041 -0.088 0.007 -0.152 -1.689 0.091
sa07_09_t1 ~~ sa07_09_t1 0.997 0.896 1.098 1.000 19.415 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal-self) is not significantly different from zero, r = -0.152, p = 0.091.

6.5.2.37 Anxiety - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7961.499 8045.476 0.983 0.04 0.068
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.976 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.423 NA NA
d_anxie_1 ~1 -0.189 -0.275 -0.103 -0.458 -4.304 0.000
anxie_t1 ~1 3.123 2.992 3.255 3.291 46.476 0.000
d_anxie_1 ~~ d_anxie_1 0.170 0.072 0.268 1.000 3.402 0.001
anxie_t1 ~~ d_anxie_1 -0.062 -0.146 0.022 -0.159 -1.449 0.147
d_anxie_1 ~~ sa06_01_t1 -0.031 -0.108 0.046 -0.074 -0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with anxiety change score (current-self) is not significantly different from zero, r = -0.074, p = 0.437.

6.5.2.38 Anxiety - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7745.195 7829.172 0.923 0.049 0.061
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.185 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.739 NA NA
d_anxie_1 ~1 -0.019 -0.077 0.039 -0.076 -0.651 0.515
anxie_t1 ~1 1.470 1.390 1.549 3.599 36.304 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.004 0.133 1.000 1.857 0.063
anxie_t1 ~~ d_anxie_1 -0.056 -0.119 0.006 -0.543 -1.760 0.078
d_anxie_1 ~~ sa06_01_t1 -0.014 -0.072 0.044 -0.055 -0.469 0.639
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with anxiety change score (ideal-self) is not significantly different from zero, r = -0.055, p = 0.639.

6.5.2.39 Anxiety - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7954.859 8038.835 0.952 0.068 0.105
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.022 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.476 NA NA
d_anxie_1 ~1 -0.187 -0.272 -0.103 -0.426 -4.344 0.000
anxie_t1 ~1 3.123 2.991 3.254 3.309 46.497 0.000
d_anxie_1 ~~ d_anxie_1 0.193 0.088 0.298 1.000 3.603 0.000
anxie_t1 ~~ d_anxie_1 -0.115 -0.204 -0.027 -0.278 -2.557 0.011
d_anxie_1 ~~ sa07_10_t1 0.113 0.030 0.197 0.258 2.652 0.008
sa07_10_t1 ~~ sa07_10_t1 0.997 0.906 1.088 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current-self) is significantly different from zero, r = 0.258, p = 0.008.

6.5.2.40 Anxiety - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7745.404 7829.38 0.924 0.049 0.058
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA
d_anxie_1 ~1 -0.019 -0.077 0.039 -0.076 -0.651 0.515
anxie_t1 ~1 1.470 1.390 1.549 3.593 36.300 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.004 0.132 1.000 1.849 0.064
anxie_t1 ~~ d_anxie_1 -0.056 -0.118 0.007 -0.537 -1.749 0.080
d_anxie_1 ~~ sa07_10_t1 0.009 -0.036 0.054 0.035 0.387 0.698
sa07_10_t1 ~~ sa07_10_t1 0.997 0.906 1.088 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-self) is not significantly different from zero, r = 0.035, p = 0.698.

6.5.2.41 Depression - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7876.749 7960.725 0.946 0.081 0.077
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.984 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.504 NA NA
d_depre_1 ~1 -0.126 -0.180 -0.073 -0.445 -4.616 0.000
depre_t1 ~1 2.974 2.857 3.091 5.383 49.897 0.000
d_depre_1 ~~ d_depre_1 0.080 0.043 0.118 1.000 4.214 0.000
depre_t1 ~~ d_depre_1 -0.035 -0.061 -0.009 -0.223 -2.607 0.009
d_depre_1 ~~ sa06_01_t1 -0.007 -0.047 0.034 -0.024 -0.327 0.744
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with depression change score (current-self) is not significantly different from zero, r = -0.024, p = 0.744.

6.5.2.42 Depression - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6171.123 6255.1 0.897 0.072 0.075
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.701 NA NA
d_depre_1 ~1 -0.006 -0.058 0.045 -0.023 -0.233 0.816
depre_t1 ~1 1.557 1.481 1.632 3.557 40.494 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.129 1.000 2.345 0.019
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.010 -0.512 -2.380 0.017
d_depre_1 ~~ sa06_01_t1 -0.003 -0.051 0.045 -0.010 -0.106 0.916
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with depression change score (ideal-self) is not significantly different from zero, r = -0.01, p = 0.916.

6.5.2.43 Depression - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7873.622 7957.599 0.905 0.11 0.129
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.015 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.540 NA NA
d_depre_1 ~1 -0.126 -0.179 -0.073 -0.431 -4.645 0.000
depre_t1 ~1 2.974 2.857 3.091 5.418 49.894 0.000
d_depre_1 ~~ d_depre_1 0.085 0.046 0.124 1.000 4.253 0.000
depre_t1 ~~ d_depre_1 -0.047 -0.076 -0.018 -0.294 -3.218 0.001
d_depre_1 ~~ sa07_11_t1 0.044 -0.003 0.090 0.149 1.847 0.065
sa07_11_t1 ~~ sa07_11_t1 0.997 0.908 1.086 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current-self) is not significantly different from zero, r = 0.149, p = 0.065.

6.5.2.44 Depression - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6171.076 6255.052 0.942 0.053 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 -0.006 -0.058 0.045 -0.024 -0.237 0.813
depre_t1 ~1 1.557 1.481 1.632 3.558 40.494 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.128 1.000 2.358 0.018
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.011 -0.511 -2.394 0.017
d_depre_1 ~~ sa07_11_t1 0.006 -0.036 0.047 0.021 0.259 0.795
sa07_11_t1 ~~ sa07_11_t1 0.997 0.908 1.086 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal-self) is not significantly different from zero, r = 0.021, p = 0.795.

6.5.2.45 Volatility - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8035.348 8119.325 0.986 0.037 0.056
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.058 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.453 NA NA
d_volat_1 ~1 -0.133 -0.213 -0.053 -0.325 -3.255 0.001
volat_t1 ~1 3.119 2.986 3.251 3.275 45.995 0.000
d_volat_1 ~~ d_volat_1 0.166 0.069 0.263 1.000 3.369 0.001
volat_t1 ~~ d_volat_1 -0.132 -0.211 -0.053 -0.339 -3.277 0.001
d_volat_1 ~~ sa06_01_t1 0.017 -0.057 0.090 0.041 0.444 0.657
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with volatility change score (current-self) is not significantly different from zero, r = 0.041, p = 0.657.

6.5.2.46 Volatility - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7228.173 7312.149 0.945 0.045 0.056
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.025 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.581 NA NA
d_volat_1 ~1 -0.010 -0.073 0.053 -0.038 -0.308 0.758
volat_t1 ~1 1.647 1.567 1.727 3.596 40.325 0.000
d_volat_1 ~~ d_volat_1 0.067 0.001 0.134 1.000 1.977 0.048
volat_t1 ~~ d_volat_1 -0.039 -0.088 0.010 -0.326 -1.555 0.120
d_volat_1 ~~ sa06_01_t1 -0.032 -0.087 0.024 -0.123 -1.124 0.261
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

The correlation of general acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, r = -0.123, p = 0.261.

6.5.2.47 Volatility - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8034.815 8118.792 0.941 0.078 0.111
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.071 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.467 NA NA
d_volat_1 ~1 -0.133 -0.212 -0.053 -0.319 -3.254 0.001
volat_t1 ~1 3.119 2.986 3.251 3.276 45.998 0.000
d_volat_1 ~~ d_volat_1 0.173 0.073 0.272 1.000 3.406 0.001
volat_t1 ~~ d_volat_1 -0.144 -0.233 -0.056 -0.365 -3.208 0.001
d_volat_1 ~~ sa07_12_t1 0.035 -0.052 0.121 0.084 0.789 0.430
sa07_12_t1 ~~ sa07_12_t1 0.997 0.893 1.101 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current-self) is not significantly different from zero, r = 0.084, p = 0.43.

6.5.2.48 Volatility - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7229.383 7313.359 0.929 0.052 0.064
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.015 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.562 NA NA
d_volat_1 ~1 -0.009 -0.072 0.054 -0.036 -0.285 0.776
volat_t1 ~1 1.646 1.566 1.726 3.588 40.318 0.000
d_volat_1 ~~ d_volat_1 0.065 -0.001 0.130 1.000 1.923 0.054
volat_t1 ~~ d_volat_1 -0.035 -0.083 0.012 -0.303 -1.449 0.147
d_volat_1 ~~ sa07_12_t1 -0.009 -0.058 0.039 -0.037 -0.383 0.701
sa07_12_t1 ~~ sa07_12_t1 0.997 0.893 1.101 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal-self) is not significantly different from zero, r = -0.037, p = 0.701.

6.5.2.49 Curiosity - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7694.052 7778.028 0.984 0.035 0.046
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.059 0.013 0.105 NA 2.498 0.013
curio_t1 ~1 4.032 3.933 4.132 7.224 79.614 0.000
d_curio_1 ~~ d_curio_1 -0.012 -0.049 0.024 NA -0.667 0.505
curio_t1 ~~ d_curio_1 -0.017 -0.050 0.016 -0.274 -1.008 0.313
d_curio_1 ~~ sa06_01_t1 -0.001 -0.040 0.038 -0.005 -0.027 0.978
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with curiosity change score (current-self) is not significantly different from zero, r = -0.005, p = 0.978.

6.5.2.50 Curiosity - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7630.715 7714.691 0.967 0.037 0.054
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.076 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.530 NA NA
d_curio_1 ~1 0.017 -0.036 0.070 0.082 0.618 0.537
curio_t1 ~1 4.457 4.382 4.533 10.770 116.320 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.006 0.089 1.000 1.700 0.089
curio_t1 ~~ d_curio_1 -0.032 -0.071 0.006 -0.384 -1.664 0.096
d_curio_1 ~~ sa06_01_t1 -0.036 -0.076 0.005 -0.175 -1.739 0.082
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with curiosity change score (ideal-self) is not significantly different from zero, r = -0.175, p = 0.082.

6.5.2.51 Curiosity - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7693.417 7777.393 0.951 0.062 0.086
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.074 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.058 0.013 0.104 NA 2.507 0.012
curio_t1 ~1 4.033 3.933 4.132 7.264 79.624 0.000
d_curio_1 ~~ d_curio_1 -0.013 -0.049 0.023 NA -0.729 0.466
curio_t1 ~~ d_curio_1 -0.014 -0.047 0.019 -0.214 -0.820 0.412
d_curio_1 ~~ sa07_13_t1 0.017 -0.024 0.058 0.149 0.819 0.413
sa07_13_t1 ~~ sa07_13_t1 0.997 0.885 1.109 1.000 17.438 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current-self) is not significantly different from zero, r = 0.149, p = 0.413.

6.5.2.52 Curiosity - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7632.744 7716.721 0.942 0.05 0.067
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.090 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.554 NA NA
d_curio_1 ~1 0.017 -0.036 0.069 0.080 0.616 0.538
curio_t1 ~1 4.458 4.383 4.533 10.864 116.520 0.000
d_curio_1 ~~ d_curio_1 0.043 -0.007 0.094 1.000 1.702 0.089
curio_t1 ~~ d_curio_1 -0.035 -0.076 0.005 -0.411 -1.695 0.090
d_curio_1 ~~ sa07_13_t1 -0.014 -0.058 0.029 -0.070 -0.648 0.517
sa07_13_t1 ~~ sa07_13_t1 0.997 0.885 1.109 1.000 17.438 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal-self) is not significantly different from zero, r = -0.07, p = 0.517.

6.5.2.53 Aesthetic - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7997.129 8081.105 0.99 0.029 0.055
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.994 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.376 NA NA
d_aesth_1 ~1 -0.001 -0.030 0.027 -0.010 -0.087 0.931
aesth_t1 ~1 3.152 3.030 3.275 9.271 50.336 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.005 0.038 1.000 1.478 0.140
aesth_t1 ~~ d_aesth_1 -0.008 -0.020 0.005 -0.174 -1.179 0.238
d_aesth_1 ~~ sa06_01_t1 -0.005 -0.029 0.020 -0.038 -0.383 0.701
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with aesthetic change score (current-self) is not significantly different from zero, r = -0.038, p = 0.701.

6.5.2.54 Aesthetic - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7659.407 7743.384 0.952 0.055 0.063
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.964 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.602 NA NA
d_aesth_1 ~1 0.020 -0.014 0.053 0.118 1.157 0.247
aesth_t1 ~1 3.097 2.962 3.233 11.664 44.863 0.000
d_aesth_1 ~~ d_aesth_1 0.028 -0.002 0.057 1.000 1.847 0.065
aesth_t1 ~~ d_aesth_1 -0.011 -0.028 0.006 -0.251 -1.242 0.214
d_aesth_1 ~~ sa06_01_t1 -0.009 -0.034 0.016 -0.055 -0.716 0.474
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.055, p = 0.474.

6.5.2.55 Aesthetic - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7992.522 8076.499 0.967 0.055 0.087
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.020 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.407 NA NA
d_aesth_1 ~1 -0.002 -0.030 0.027 -0.011 -0.105 0.916
aesth_t1 ~1 3.152 3.030 3.275 9.322 50.334 0.000
d_aesth_1 ~~ d_aesth_1 0.018 -0.005 0.041 1.000 1.539 0.124
aesth_t1 ~~ d_aesth_1 -0.011 -0.026 0.003 -0.249 -1.549 0.121
d_aesth_1 ~~ sa07_14_t1 -0.030 -0.060 0.000 -0.226 -1.986 0.047
sa07_14_t1 ~~ sa07_14_t1 0.997 0.908 1.086 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current-self) is (barely) significantly different from zero, r = -0.226, p = 0.047.

6.5.2.56 Aesthetic - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7658.674 7742.65 0.948 0.058 0.068
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.978 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.622 NA NA
d_aesth_1 ~1 0.019 -0.014 0.053 0.115 1.148 0.251
aesth_t1 ~1 3.097 2.962 3.233 11.589 44.859 0.000
d_aesth_1 ~~ d_aesth_1 0.029 -0.002 0.059 1.000 1.854 0.064
aesth_t1 ~~ d_aesth_1 -0.013 -0.032 0.006 -0.282 -1.331 0.183
d_aesth_1 ~~ sa07_14_t1 -0.015 -0.042 0.012 -0.089 -1.088 0.277
sa07_14_t1 ~~ sa07_14_t1 0.997 0.908 1.086 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal-self) is not significantly different from zero, r = -0.089, p = 0.277.

6.5.2.57 Imagination - current-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7700.084 7784.06 0.956 0.059 0.05
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.428 NA NA
d_imagi_1 ~1 0.132 0.070 0.193 0.484 4.204 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.360 68.404 0.000
d_imagi_1 ~~ d_imagi_1 0.074 -0.027 0.175 1.000 1.439 0.150
imagi_t1 ~~ d_imagi_1 -0.065 -0.139 0.009 -0.351 -1.716 0.086
d_imagi_1 ~~ sa06_01_t1 -0.009 -0.059 0.041 -0.034 -0.366 0.715
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with imagination change score (current-self) is not significantly different from zero, r = -0.034, p = 0.715.

6.5.2.58 Imagination - ideal-self: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7196.926 7280.902 0.925 0.061 0.06
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.036 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.640 NA NA
d_imagi_1 ~1 -0.012 -0.075 0.051 -0.035 -0.359 0.720
imagi_t1 ~1 4.544 4.468 4.621 8.602 115.758 0.000
d_imagi_1 ~~ d_imagi_1 0.106 0.027 0.186 1.000 2.622 0.009
imagi_t1 ~~ d_imagi_1 -0.063 -0.125 -0.001 -0.365 -1.997 0.046
d_imagi_1 ~~ sa06_01_t1 -0.042 -0.092 0.007 -0.129 -1.664 0.096
sa06_01_t1 ~~ sa06_01_t1 0.997 0.794 1.200 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.107 0.107 0.000 0.000 1.000

Correlation of general acceptance goal with imagination change score (ideal-self) is not significantly different from zero, r = -0.129, p = 0.096.

6.5.2.59 Imagination - current-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7697.169 7781.146 0.876 0.104 0.121
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.099 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.472 NA NA
d_imagi_1 ~1 0.131 0.070 0.193 0.450 4.193 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.361 68.422 0.000
d_imagi_1 ~~ d_imagi_1 0.085 -0.020 0.190 1.000 1.586 0.113
imagi_t1 ~~ d_imagi_1 -0.082 -0.159 -0.005 -0.416 -2.097 0.036
d_imagi_1 ~~ sa07_15_t1 -0.053 -0.114 0.008 -0.182 -1.696 0.090
sa07_15_t1 ~~ sa07_15_t1 0.997 0.913 1.081 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current-self) is not significantly different from zero, r = -0.182, p = 0.09.

6.5.2.60 Imagination - ideal-self: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7195.638 7279.614 0.899 0.072 0.07
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.055 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.673 NA NA
d_imagi_1 ~1 -0.012 -0.076 0.051 -0.037 -0.383 0.702
imagi_t1 ~1 4.545 4.468 4.622 8.593 115.680 0.000
d_imagi_1 ~~ d_imagi_1 0.114 0.031 0.196 1.000 2.695 0.007
imagi_t1 ~~ d_imagi_1 -0.071 -0.134 -0.008 -0.399 -2.208 0.027
d_imagi_1 ~~ sa07_15_t1 -0.054 -0.112 0.004 -0.159 -1.809 0.070
sa07_15_t1 ~~ sa07_15_t1 0.997 0.913 1.081 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal-self) is not significantly different from zero, r = -0.159, p = 0.07.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.009 0.035 0.446 0.656
extraversion ideal general 0.018 0.070 0.778 0.437
extraversion current specific -0.026 -0.147 -1.181 0.237
extraversion ideal specific -0.008 -0.048 -0.443 0.658
agreeableness current general -0.009 -0.042 -0.605 0.545
agreeableness ideal general 0.000 -0.001 -0.020 0.984
agreeableness current specific -0.041 -0.296 -2.392 0.017
agreeableness ideal specific -0.017 -0.094 -1.087 0.277
conscientiousness current general -0.035 -0.101 -1.418 0.156
conscientiousness ideal general 0.019 0.060 1.044 0.297
conscientiousness current specific -0.043 -0.159 -1.707 0.088
conscientiousness ideal specific -0.035 -0.148 -2.036 0.042
neuroticism current general -0.026 -0.070 -1.082 0.279
neuroticism ideal general -0.018 -0.050 -0.681 0.496
neuroticism current specific 0.045 0.178 2.121 0.034
neuroticism ideal specific 0.002 0.009 0.116 0.908
openness current general -0.016 -0.065 -0.794 0.427
openness ideal general -0.028 -0.132 -1.941 0.052
openness current specific -0.018 -0.126 -1.099 0.272
openness ideal specific -0.018 -0.140 -2.101 0.036

Four covariances significantly differ from zero (at p < .05):

  • changes in current-level agreeableness covary with the specific acceptance goals (latent factor of the three A facets)
  • changes in ideal-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets)
    changes in current-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)
  • changes in ideal-level openness covary with the specific acceptance goals (latent factor of the three O facets)

-> unexpected direction of effects!

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.036 0.083 0.879 0.379
sociability ideal general -0.022 -0.118 -0.742 0.458
sociability current specific -0.049 -0.108 -1.284 0.199
sociability ideal specific -0.043 -0.239 -1.742 0.082
assertiveness current general -0.011 -0.040 -0.457 0.648
assertiveness ideal general 0.040 0.239 1.826 0.068
assertiveness current specific -0.005 -0.017 -0.164 0.870
assertiveness ideal specific 0.045 0.272 1.817 0.069
energy current general -0.003 -0.018 -0.245 0.806
energy ideal general 0.010 0.062 0.781 0.435
energy current specific -0.028 -0.146 -1.415 0.157
energy ideal specific 0.005 0.032 0.398 0.690
compassion current general -0.043 -0.111 -1.236 0.216
compassion ideal general -0.005 -0.014 -0.138 0.890
compassion current specific -0.092 -0.226 -2.053 0.040
compassion ideal specific -0.042 -0.111 -1.036 0.300
respectfulness current general -0.007 -0.022 -0.308 0.758
respectfulness ideal general -0.004 -0.029 -0.209 0.834
respectfulness current specific -0.147 -0.402 -3.818 0.000
respectfulness ideal specific -0.023 -0.152 -0.984 0.325
trust current general 0.008 0.038 0.283 0.777
trust ideal general 0.009 0.034 0.371 0.710
trust current specific 0.040 0.193 1.108 0.268
trust ideal specific 0.018 0.066 0.629 0.529
organization current general -0.083 -0.178 -2.143 0.032
organization ideal general -0.003 -0.013 -0.139 0.889
organization current specific -0.148 -0.286 -3.323 0.001
organization ideal specific -0.035 -0.134 -1.259 0.208
productiveness current general -0.035 -0.090 -1.111 0.267
productiveness ideal general 0.006 0.027 0.374 0.708
productiveness current specific -0.073 -0.177 -1.833 0.067
productiveness ideal specific -0.036 -0.153 -1.789 0.074
responsibility current general -0.011 -0.058 -0.668 0.504
responsibility ideal general 0.039 0.143 1.685 0.092
responsibility current specific -0.034 -0.173 -1.505 0.132
responsibility ideal specific -0.041 -0.152 -1.689 0.091
anxiety current general -0.031 -0.074 -0.778 0.437
anxiety ideal general -0.014 -0.055 -0.469 0.639
anxiety current specific 0.113 0.258 2.652 0.008
anxiety ideal specific 0.009 0.035 0.387 0.698
depression current general -0.007 -0.024 -0.327 0.744
depression ideal general -0.003 -0.010 -0.106 0.916
depression current specific 0.044 0.149 1.847 0.065
depression ideal specific 0.006 0.021 0.259 0.795
volatility current general 0.017 0.041 0.444 0.657
volatility ideal general -0.032 -0.123 -1.124 0.261
volatility current specific 0.035 0.084 0.789 0.430
volatility ideal specific -0.009 -0.037 -0.383 0.701
curiosity current general -0.001 -0.005 -0.027 0.978
curiosity ideal general -0.036 -0.175 -1.739 0.082
curiosity current specific 0.017 0.149 0.819 0.413
curiosity ideal specific -0.014 -0.070 -0.648 0.517
aesthetic current general -0.005 -0.038 -0.383 0.701
aesthetic ideal general -0.009 -0.055 -0.716 0.474
aesthetic current specific -0.030 -0.226 -1.986 0.047
aesthetic ideal specific -0.015 -0.089 -1.088 0.277
imagination current general -0.009 -0.034 -0.366 0.715
imagination ideal general -0.042 -0.129 -1.664 0.096
imagination current specific -0.053 -0.182 -1.696 0.090
imagination ideal specific -0.054 -0.159 -1.809 0.070

Looking at the facets, we find five covariances that significantly differ from zero at p < .05 (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level compassion and respectfulness covary with the respective facet-specific acceptance goal.
- Further, changes in current-level organization covary with the general acceptance goal and the specific facet acceptance goal.
- Changes in current-level anxiety covary with the specific facet acceptance goal.

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of self-improvement behaviors as moderators of change in personality in self-improvement group (H2 in paper)

In the self-improvement group, change in current-self ratings but not change in ideal-self ratings will be moderated by change goals (both general and trait-/facet-specific goals) and the frequency of self-improvement behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify change goals (or the frequency of self-improvement behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in current-self ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency self-improvement behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_mod <- df_sbsa2_wide_pers_sb_mod %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals -> asked at T1
                                  "sb04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2_wide_pers_sb_mod_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_mod_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_mod_fu)

df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod_fu)

6.6.1 Big Five traits (run models)

Run models for all traits with templates & loops:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in current-self ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_goal_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in current-self ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"),  # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_frequ_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), trait_model_fit))
}  

6.6.2 Big Five traits (current self)

6.6.2.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6401.657 6501.056 0.941 0.088 0.049
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.525 NA NA
d_extra_1 ~1 0.098 0.043 0.152 0.335 3.513 0.000
extra_t1 ~1 2.987 2.901 3.073 4.990 67.877 0.000
d_extra_1 ~~ d_extra_1 0.082 0.041 0.123 0.970 3.905 0.000
extra_t1 ~~ d_extra_1 -0.046 -0.083 -0.009 -0.389 -2.445 0.014
extra_t1 ~ goals -0.732 -1.018 -0.446 -0.725 -5.019 0.000
d_extra_1 ~ goals 0.085 -0.048 0.217 0.173 1.255 0.209
goals ~~ goals 0.351 0.185 0.517 1.000 4.145 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.085, p = 0.209.

6.6.2.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5910.945 6010.344 0.972 0.062 0.043
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.524 NA NA
d_extra_1 ~1 0.096 0.041 0.152 0.333 3.432 0.001
extra_t1 ~1 2.987 2.901 3.073 5.000 67.984 0.000
d_extra_1 ~~ d_extra_1 0.078 0.038 0.118 0.930 3.833 0.000
extra_t1 ~~ d_extra_1 -0.070 -0.107 -0.033 -0.418 -3.674 0.000
extra_t1 ~ frequ 0.045 -0.090 0.179 0.051 0.651 0.515
d_extra_1 ~ frequ 0.113 0.034 0.192 0.265 2.802 0.005
frequ ~~ frequ 0.462 0.299 0.625 1.000 5.553 0.000

The frequency of self-improvement behaviors significantly moderates changes in extraversion (current-self), b = 0.113, p = 0.005.

6.6.2.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5626.258 5725.657 1 0 0.033
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.074 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.535 NA NA
d_agree_1 ~1 0.020 -0.015 0.056 0.100 1.123 0.261
agree_t1 ~1 3.463 3.395 3.531 8.489 99.804 0.000
d_agree_1 ~~ d_agree_1 0.040 0.015 0.065 0.981 3.173 0.002
agree_t1 ~~ d_agree_1 -0.028 -0.049 -0.007 -0.360 -2.587 0.010
agree_t1 ~ goals -0.198 -0.298 -0.099 -0.330 -3.911 0.000
d_agree_1 ~ goals 0.042 -0.023 0.106 0.139 1.267 0.205
goals ~~ goals 0.461 0.302 0.620 1.000 5.688 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = 0.042, p = 0.205.

6.6.2.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5234.839 5334.238 0.989 0.033 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.086 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.022 -0.017 0.060 0.101 1.106 0.269
agree_t1 ~1 3.462 3.394 3.530 8.023 99.324 0.000
d_agree_1 ~~ d_agree_1 0.046 0.018 0.074 0.998 3.198 0.001
agree_t1 ~~ d_agree_1 -0.038 -0.063 -0.014 -0.436 -3.093 0.002
agree_t1 ~ frequ 0.192 0.077 0.308 0.307 3.264 0.001
d_agree_1 ~ frequ 0.013 -0.054 0.079 0.040 0.367 0.714
frequ ~~ frequ 0.475 0.312 0.639 1.000 5.709 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = 0.013, p = 0.714.

6.6.2.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5604.949 5704.348 0.989 0.05 0.031
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.997 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA
d_consc_1 ~1 0.106 0.049 0.163 0.256 3.654 0.000
consc_t1 ~1 3.378 3.287 3.469 4.353 72.745 0.000
d_consc_1 ~~ d_consc_1 0.171 0.082 0.259 0.991 3.787 0.000
consc_t1 ~~ d_consc_1 -0.063 -0.112 -0.015 -0.274 -2.560 0.010
consc_t1 ~ goals -0.664 -0.764 -0.564 -0.693 -12.973 0.000
d_consc_1 ~ goals 0.048 -0.024 0.119 0.093 1.296 0.195
goals ~~ goals 0.655 0.533 0.778 1.000 10.490 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.048, p = 0.195.

6.6.2.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5514.259 5613.658 0.992 0.038 0.031
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.996 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA
d_consc_1 ~1 0.103 0.047 0.160 0.252 3.569 0.000
consc_t1 ~1 3.378 3.287 3.469 4.405 72.829 0.000
d_consc_1 ~~ d_consc_1 0.168 0.080 0.256 0.995 3.728 0.000
consc_t1 ~~ d_consc_1 -0.084 -0.139 -0.030 -0.270 -3.026 0.002
consc_t1 ~ frequ 0.125 -0.037 0.288 0.111 1.511 0.131
d_consc_1 ~ frequ 0.043 -0.057 0.144 0.072 0.846 0.398
frequ ~~ frequ 0.464 0.299 0.628 1.000 5.525 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.043, p = 0.398.

6.6.2.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5868.996 5968.395 0.99 0.047 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.070 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA
d_neuro_1 ~1 -0.179 -0.242 -0.116 -0.387 -5.552 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.890 66.638 0.000
d_neuro_1 ~~ d_neuro_1 0.206 0.150 0.263 0.970 7.210 0.000
neuro_t1 ~~ d_neuro_1 -0.103 -0.152 -0.054 -0.388 -4.130 0.000
neuro_t1 ~ goals 0.804 0.669 0.939 0.718 11.663 0.000
d_neuro_1 ~ goals -0.106 -0.199 -0.013 -0.173 -2.235 0.025
goals ~~ goals 0.566 0.434 0.698 1.000 8.394 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.106, p = 0.025.

6.6.2.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5753.669 5853.068 0.992 0.04 0.038
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.588 NA NA
d_neuro_1 ~1 -0.180 -0.243 -0.117 -0.391 -5.602 0.000
neuro_t1 ~1 3.276 3.179 3.372 3.897 66.619 0.000
d_neuro_1 ~~ d_neuro_1 0.212 0.155 0.270 0.997 7.216 0.000
neuro_t1 ~~ d_neuro_1 -0.153 -0.211 -0.094 -0.394 -5.088 0.000
neuro_t1 ~ frequ -0.046 -0.224 0.132 -0.037 -0.503 0.615
d_neuro_1 ~ frequ -0.035 -0.142 0.073 -0.051 -0.631 0.528
frequ ~~ frequ 0.465 0.300 0.630 1.000 5.513 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.035, p = 0.528.

6.6.2.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5635.29 5734.689 0.983 0.052 0.037
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.996 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.455 NA NA
d_openn_1 ~1 0.080 0.032 0.128 0.299 3.286 0.001
openn_t1 ~1 3.485 3.409 3.560 5.931 90.550 0.000
d_openn_1 ~~ d_openn_1 0.072 0.038 0.106 1.000 4.167 0.000
openn_t1 ~~ d_openn_1 -0.034 -0.068 0.001 -0.225 -1.927 0.054
openn_t1 ~ goals -0.326 -0.467 -0.185 -0.335 -4.525 0.000
d_openn_1 ~ goals 0.009 -0.077 0.095 0.020 0.204 0.839
goals ~~ goals 0.364 0.238 0.490 1.000 5.672 0.000

The moderation effect of specific, facet-level change goals with the openness change score (current-self) is not significantly different from zero, b = 0.009, p = 0.839.

6.6.2.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5456.619 5556.018 0.997 0.019 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.997 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.456 NA NA
d_openn_1 ~1 0.077 0.030 0.124 0.291 3.181 0.001
openn_t1 ~1 3.486 3.410 3.561 6.022 90.667 0.000
d_openn_1 ~~ d_openn_1 0.069 0.036 0.102 0.989 4.128 0.000
openn_t1 ~~ d_openn_1 -0.038 -0.071 -0.004 -0.256 -2.213 0.027
openn_t1 ~ frequ 0.203 0.075 0.332 0.238 3.095 0.002
d_openn_1 ~ frequ 0.041 -0.035 0.118 0.106 1.062 0.288
frequ ~~ frequ 0.459 0.296 0.622 1.000 5.512 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-self) is not significantly different from zero, b = 0.041, p = 0.288.

6.6.3 Big Five traits (current self - follow-up T3)

6.6.3.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5469.258 5564.942 0.984 0.046 0.04
# parameters of interest
params_lcs_extra_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.974 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.553 NA NA
d_extra_1 ~1 0.019 -0.029 0.067 0.062 0.766 0.444
extra_t2 ~1 3.141 3.052 3.229 5.832 69.404 0.000
d_extra_1 ~~ d_extra_1 0.088 0.031 0.145 0.938 3.005 0.003
extra_t2 ~~ d_extra_1 -0.011 -0.049 0.027 -0.094 -0.566 0.571
extra_t2 ~ goals -0.557 -0.759 -0.354 -0.678 -5.385 0.000
d_extra_1 ~ goals 0.116 0.013 0.219 0.249 2.209 0.027
goals ~~ goals 0.431 0.231 0.631 1.000 4.222 0.000

The moderation effect of specific, facet-level change goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.116, p = 0.027.

6.6.3.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5334.706 5430.391 0.988 0.042 0.045
# parameters of interest
params_lcs_extra_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.978 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.556 NA NA
d_extra_1 ~1 0.018 -0.032 0.068 0.057 0.697 0.486
extra_t2 ~1 3.141 3.052 3.230 5.660 69.146 0.000
d_extra_1 ~~ d_extra_1 0.099 0.037 0.161 0.999 3.137 0.002
extra_t2 ~~ d_extra_1 -0.042 -0.080 -0.003 -0.243 -2.094 0.036
extra_t2 ~ frequ 0.171 0.029 0.313 0.208 2.366 0.018
d_extra_1 ~ frequ -0.015 -0.103 0.073 -0.033 -0.339 0.735
frequ ~~ frequ 0.454 0.290 0.618 1.000 5.434 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (current-self) is not significantly different from zero, b = -0.015, p = 0.735.

6.6.3.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4835.875 4931.559 0.988 0.035 0.038
# parameters of interest
params_lcs_agree_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.983 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.370 NA NA
d_agree_1 ~1 -0.007 -0.039 0.025 -0.052 -0.442 0.658
agree_t2 ~1 3.472 3.403 3.542 9.551 98.183 0.000
d_agree_1 ~~ d_agree_1 0.019 -0.004 0.041 1.000 1.632 0.103
agree_t2 ~~ d_agree_1 -0.007 -0.022 0.008 -0.152 -0.954 0.340
agree_t2 ~ goals -0.143 -0.232 -0.053 -0.262 -3.118 0.002
d_agree_1 ~ goals -0.004 -0.070 0.061 -0.021 -0.128 0.898
goals ~~ goals 0.447 0.265 0.630 1.000 4.805 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-self) is not significantly different from zero, b = -0.004, p = 0.898.

6.6.3.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4772.466 4868.151 0.99 0.032 0.043
# parameters of interest
params_lcs_agree_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.982 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.360 NA NA
d_agree_1 ~1 -0.008 -0.044 0.027 -0.057 -0.454 0.650
agree_t2 ~1 3.473 3.403 3.542 8.888 97.530 0.000
d_agree_1 ~~ d_agree_1 0.019 -0.006 0.045 0.939 1.470 0.142
agree_t2 ~~ d_agree_1 -0.002 -0.021 0.016 -0.047 -0.253 0.801
agree_t2 ~ frequ 0.204 0.096 0.312 0.362 3.708 0.000
d_agree_1 ~ frequ -0.051 -0.106 0.004 -0.247 -1.806 0.071
frequ ~~ frequ 0.482 0.318 0.646 1.000 5.757 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = -0.051, p = 0.071.

6.6.3.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4928.05 5023.735 0.995 0.032 0.034
# parameters of interest
params_lcs_consc_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.043 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.594 NA NA
d_consc_1 ~1 0.011 -0.052 0.074 0.025 0.341 0.733
consc_t2 ~1 3.507 3.412 3.602 4.615 72.539 0.000
d_consc_1 ~~ d_consc_1 0.184 0.081 0.286 0.980 3.522 0.000
consc_t2 ~~ d_consc_1 -0.088 -0.152 -0.025 -0.348 -2.719 0.007
consc_t2 ~ goals -0.602 -0.709 -0.496 -0.627 -11.135 0.000
d_consc_1 ~ goals 0.076 -0.006 0.159 0.140 1.816 0.069
goals ~~ goals 0.626 0.488 0.765 1.000 8.875 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.076, p = 0.069.

6.6.3.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5107.004 5202.688 0.99 0.045 0.036
# parameters of interest
params_lcs_consc_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.039 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.591 NA NA
d_consc_1 ~1 0.012 -0.051 0.075 0.027 0.365 0.715
consc_t2 ~1 3.507 3.413 3.602 4.624 72.538 0.000
d_consc_1 ~~ d_consc_1 0.186 0.088 0.284 0.999 3.711 0.000
consc_t2 ~~ d_consc_1 -0.113 -0.173 -0.054 -0.350 -3.725 0.000
consc_t2 ~ frequ 0.168 0.005 0.332 0.151 2.018 0.044
d_consc_1 ~ frequ -0.015 -0.120 0.089 -0.024 -0.283 0.777
frequ ~~ frequ 0.462 0.298 0.627 1.000 5.508 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-self) is not significantly different from zero, b = -0.015, p = 0.777.

6.6.3.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5114.794 5210.479 0.99 0.045 0.028
# parameters of interest
params_lcs_neuro_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 -0.049 -0.107 0.010 -0.134 -1.627 0.104
neuro_t2 ~1 3.095 2.998 3.193 3.946 62.201 0.000
d_neuro_1 ~~ d_neuro_1 0.130 0.079 0.180 0.976 5.030 0.000
neuro_t2 ~~ d_neuro_1 -0.052 -0.094 -0.011 -0.243 -2.461 0.014
neuro_t2 ~ goals 0.703 0.552 0.854 0.651 9.124 0.000
d_neuro_1 ~ goals -0.077 -0.169 0.015 -0.154 -1.646 0.100
goals ~~ goals 0.528 0.381 0.675 1.000 7.045 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.077, p = 0.1.

6.6.3.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5249.745 5345.429 0.99 0.044 0.037
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 -0.049 -0.108 0.010 -0.134 -1.616 0.106
neuro_t2 ~1 3.095 2.998 3.193 3.947 62.215 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.082 0.184 1.000 5.075 0.000
neuro_t2 ~~ d_neuro_1 -0.081 -0.127 -0.036 -0.285 -3.493 0.000
neuro_t2 ~ frequ -0.072 -0.235 0.091 -0.063 -0.866 0.386
d_neuro_1 ~ frequ -0.012 -0.111 0.088 -0.022 -0.230 0.818
frequ ~~ frequ 0.465 0.301 0.628 1.000 5.561 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-self) is not significantly different from zero, b = -0.012, p = 0.818.

6.6.3.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4743.485 4839.169 0.983 0.055 0.035
# parameters of interest
params_lcs_openn_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.007 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.438 NA NA
d_openn_1 ~1 0.018 -0.027 0.063 0.072 0.795 0.427
openn_t2 ~1 3.586 3.505 3.667 6.190 87.225 0.000
d_openn_1 ~~ d_openn_1 0.061 0.032 0.090 0.962 4.170 0.000
openn_t2 ~~ d_openn_1 -0.025 -0.054 0.004 -0.185 -1.714 0.086
openn_t2 ~ goals -0.296 -0.435 -0.157 -0.307 -4.172 0.000
d_openn_1 ~ goals 0.082 -0.001 0.164 0.195 1.943 0.052
goals ~~ goals 0.362 0.230 0.495 1.000 5.358 0.000

The moderation effect of specific, facet-level change goals with the openness change score (current-self) is not significantly different from zero, b = 0.082, p = 0.052.

6.6.3.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4875.306 4970.99 0.991 0.037 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.006 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.440 NA NA
d_openn_1 ~1 0.018 -0.026 0.062 0.072 0.797 0.426
openn_t2 ~1 3.586 3.505 3.666 6.270 87.269 0.000
d_openn_1 ~~ d_openn_1 0.062 0.034 0.090 0.991 4.333 0.000
openn_t2 ~~ d_openn_1 -0.029 -0.059 0.000 -0.216 -1.967 0.049
openn_t2 ~ frequ 0.242 0.103 0.380 0.287 3.422 0.001
d_openn_1 ~ frequ -0.034 -0.111 0.042 -0.093 -0.886 0.375
frequ ~~ frequ 0.459 0.295 0.624 1.000 5.487 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-self) is not significantly different from zero, b = -0.034, p = 0.375.

6.6.4 Big Five traits (ideal self)

6.6.4.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5983.866 6083.265 0.994 0.02 0.033
# parameters of interest
params_lcs_extra_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.062 0.024 -0.080 -0.863 0.388
extra_t1 ~1 3.682 3.615 3.749 9.892 107.766 0.000
d_extra_1 ~~ d_extra_1 0.057 0.023 0.091 0.995 3.324 0.001
extra_t1 ~~ d_extra_1 -0.026 -0.052 0.000 -0.290 -1.948 0.051
extra_t1 ~ goals 0.063 -0.119 0.244 0.077 0.677 0.498
d_extra_1 ~ goals 0.037 -0.146 0.220 0.071 0.397 0.691
goals ~~ goals 0.207 0.008 0.407 1.000 2.037 0.042

The moderation effect of specific, facet-level change goals with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.037, p = 0.691.

6.6.4.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5402.83 5502.23 0.994 0.022 0.036
# parameters of interest
params_lcs_extra_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.975 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.061 0.024 -0.079 -0.854 0.393
extra_t1 ~1 3.682 3.615 3.749 10.096 107.889 0.000
d_extra_1 ~~ d_extra_1 0.055 0.022 0.087 0.989 3.272 0.001
extra_t1 ~~ d_extra_1 -0.027 -0.052 -0.001 -0.326 -2.035 0.042
extra_t1 ~ frequ 0.150 0.068 0.232 0.285 3.581 0.000
d_extra_1 ~ frequ 0.035 -0.038 0.108 0.103 0.934 0.351
frequ ~~ frequ 0.483 0.321 0.644 1.000 5.857 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.035, p = 0.351.

6.6.4.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5653.605 5753.005 0.978 0.047 0.048
# parameters of interest
params_lcs_agree_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.053 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA
d_agree_1 ~1 -0.030 -0.075 0.014 -0.111 -1.347 0.178
agree_t1 ~1 3.770 3.700 3.839 8.453 106.066 0.000
d_agree_1 ~~ d_agree_1 0.075 0.041 0.108 0.998 4.322 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.071 -0.022 -0.385 -3.654 0.000
agree_t1 ~ goals -0.074 -0.171 0.023 -0.114 -1.487 0.137
d_agree_1 ~ goals 0.019 -0.065 0.103 0.048 0.444 0.657
goals ~~ goals 0.477 0.316 0.639 1.000 5.789 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.019, p = 0.657.

6.6.4.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5250.512 5349.911 0.97 0.056 0.052
# parameters of interest
params_lcs_agree_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA
d_agree_1 ~1 -0.030 -0.074 0.013 -0.112 -1.355 0.175
agree_t1 ~1 3.769 3.700 3.839 8.618 106.252 0.000
d_agree_1 ~~ d_agree_1 0.071 0.039 0.104 0.993 4.285 0.000
agree_t1 ~~ d_agree_1 -0.043 -0.068 -0.018 -0.381 -3.386 0.001
agree_t1 ~ frequ 0.153 0.064 0.242 0.242 3.363 0.001
d_agree_1 ~ frequ -0.032 -0.113 0.048 -0.084 -0.794 0.427
frequ ~~ frequ 0.480 0.315 0.645 1.000 5.693 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.032, p = 0.427.

6.6.4.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5121.303 5220.702 0.999 0.01 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.936 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.623 NA NA
d_consc_1 ~1 0.009 -0.034 0.052 0.035 0.423 0.673
consc_t1 ~1 4.319 4.257 4.382 10.824 135.515 0.000
d_consc_1 ~~ d_consc_1 0.069 0.039 0.099 0.982 4.528 0.000
consc_t1 ~~ d_consc_1 -0.023 -0.050 0.004 -0.222 -1.699 0.089
consc_t1 ~ goals 0.028 -0.037 0.093 0.054 0.835 0.404
d_consc_1 ~ goals -0.046 -0.109 0.016 -0.136 -1.457 0.145
goals ~~ goals 0.606 0.465 0.746 1.000 8.433 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.046, p = 0.145.

6.6.4.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4867.134 4966.533 0.982 0.044 0.053
# parameters of interest
params_lcs_consc_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.619 NA NA
d_consc_1 ~1 0.010 -0.033 0.053 0.037 0.443 0.658
consc_t1 ~1 4.319 4.257 4.382 10.733 135.393 0.000
d_consc_1 ~~ d_consc_1 0.070 0.041 0.100 0.993 4.634 0.000
consc_t1 ~~ d_consc_1 -0.026 -0.054 0.002 -0.252 -1.833 0.067
consc_t1 ~ frequ 0.132 0.052 0.212 0.229 3.246 0.001
d_consc_1 ~ frequ 0.031 -0.031 0.094 0.082 0.988 0.323
frequ ~~ frequ 0.487 0.319 0.655 1.000 5.676 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (ideal-self) is not significantly different from zero, b = 0.031, p = 0.323.

6.6.4.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5181.078 5280.477 0.999 0.008 0.024
# parameters of interest
params_lcs_neuro_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.943 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.755 NA NA
d_neuro_1 ~1 0.042 -0.011 0.096 0.116 1.543 0.123
neuro_t1 ~1 1.707 1.648 1.766 3.748 56.783 0.000
d_neuro_1 ~~ d_neuro_1 0.130 0.078 0.183 0.980 4.875 0.000
neuro_t1 ~~ d_neuro_1 -0.050 -0.090 -0.010 -0.307 -2.455 0.014
neuro_t1 ~ goals -0.098 -0.184 -0.011 -0.157 -2.208 0.027
d_neuro_1 ~ goals 0.071 -0.021 0.162 0.142 1.516 0.129
goals ~~ goals 0.538 0.393 0.683 1.000 7.280 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.071, p = 0.129.

6.6.4.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4888.225 4987.625 0.983 0.042 0.055
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.942 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.754 NA NA
d_neuro_1 ~1 0.042 -0.012 0.095 0.114 1.528 0.127
neuro_t1 ~1 1.707 1.648 1.766 3.746 56.783 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.078 0.188 1.000 4.703 0.000
neuro_t1 ~~ d_neuro_1 -0.054 -0.099 -0.008 -0.328 -2.308 0.021
neuro_t1 ~ frequ -0.125 -0.228 -0.022 -0.192 -2.376 0.017
d_neuro_1 ~ frequ -0.004 -0.098 0.090 -0.008 -0.087 0.931
frequ ~~ frequ 0.490 0.317 0.663 1.000 5.543 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.004, p = 0.931.

6.6.4.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5523.316 5622.715 0.976 0.053 0.061
# parameters of interest
params_lcs_openn_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.026 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA
d_openn_1 ~1 0.016 -0.012 0.044 0.109 1.131 0.258
openn_t1 ~1 3.917 3.856 3.979 13.356 125.080 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.037 1.000 2.877 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.027 0.000 -0.302 -1.905 0.057
openn_t1 ~ goals -0.015 -0.086 0.056 -0.031 -0.415 0.678
d_openn_1 ~ goals 0.000 -0.052 0.052 0.000 0.002 0.999
goals ~~ goals 0.365 0.242 0.488 1.000 5.801 0.000

The moderation effect of specific, facet-level change goals with the openness change score (ideal-self) is not significantly different from zero, b = 0, p = 0.999.

6.6.4.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5327.6 5426.999 0.949 0.071 0.072
# parameters of interest
params_lcs_openn_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA
d_openn_1 ~1 0.017 -0.012 0.045 0.110 1.128 0.259
openn_t1 ~1 3.917 3.856 3.979 13.070 124.999 0.000
d_openn_1 ~~ d_openn_1 0.022 0.007 0.038 0.998 2.832 0.005
openn_t1 ~~ d_openn_1 -0.014 -0.029 0.000 -0.320 -1.950 0.051
openn_t1 ~ frequ 0.051 -0.023 0.125 0.118 1.363 0.173
d_openn_1 ~ frequ 0.011 -0.037 0.059 0.049 0.441 0.659
frequ ~~ frequ 0.472 0.307 0.637 1.000 5.613 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.659.

6.6.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

facet_template_mod_goal_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-self ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

facet_template_mod_frequ_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-self ratings from T2 to T3
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), facet_model_fit))
}  

6.6.6 Big Five facets (current self)

6.6.6.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7876.792 7964.722 0.937 0.088 0.052
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.078 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.504 NA NA
d_socia_1 ~1 0.082 0.007 0.156 0.208 2.156 0.031
socia_t1 ~1 2.873 2.754 2.992 3.421 47.439 0.000
d_socia_1 ~~ d_socia_1 0.153 0.077 0.228 0.991 3.965 0.000
socia_t1 ~~ d_socia_1 -0.111 -0.173 -0.049 -0.386 -3.502 0.000
d_socia_1 ~ sb07_01_t1 0.037 -0.036 0.110 0.095 1.002 0.316
sb07_01_t1 ~~ sb07_01_t1 0.997 0.874 1.119 1.000 15.904 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) is not significantly different from zero, b = 0.037, p = 0.316.

6.6.6.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9252.51 9367.201 0.938 0.075 0.066
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.082 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA
d_socia_1 ~1 0.073 0.001 0.145 0.193 1.996 0.046
socia_t1 ~1 2.875 2.747 3.003 3.530 44.063 0.000
d_socia_1 ~~ d_socia_1 0.126 0.058 0.194 0.871 3.642 0.000
socia_t1 ~~ d_socia_1 -0.108 -0.174 -0.041 -0.376 -3.182 0.001
socia_t1 ~ frequ -0.135 -0.309 0.039 -0.114 -1.520 0.128
d_socia_1 ~ frequ 0.198 0.093 0.303 0.359 3.694 0.000
frequ ~~ frequ 0.476 0.312 0.640 1.000 5.689 0.000

The frequency of self-improvement behaviors significantly moderates changes in sociability (current-self) from T1 to T2, b = 0.198, p = 0.

6.6.6.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8149.264 8237.194 0.94 0.076 0.056
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.036 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.482 NA NA
d_asser_1 ~1 0.065 0.013 0.116 0.232 2.455 0.014
asser_t1 ~1 3.091 2.975 3.206 5.172 52.383 0.000
d_asser_1 ~~ d_asser_1 0.077 0.013 0.141 0.996 2.341 0.019
asser_t1 ~~ d_asser_1 -0.053 -0.099 -0.007 -0.333 -2.278 0.023
d_asser_1 ~ sb07_02_t1 -0.018 -0.068 0.031 -0.066 -0.736 0.462
sb07_02_t1 ~~ sb07_02_t1 0.997 0.883 1.111 1.000 17.186 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (current-self) is not significantly different from zero, b = -0.018, p = 0.462.

6.6.6.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9472.414 9587.105 0.981 0.038 0.041
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.026 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.486 NA NA
d_asser_1 ~1 0.058 0.009 0.106 0.214 2.344 0.019
asser_t1 ~1 3.094 2.974 3.215 5.455 50.439 0.000
d_asser_1 ~~ d_asser_1 0.072 0.014 0.130 0.994 2.414 0.016
asser_t1 ~~ d_asser_1 -0.047 -0.088 -0.005 -0.314 -2.214 0.027
asser_t1 ~ frequ 0.179 0.044 0.314 0.215 2.597 0.009
d_asser_1 ~ frequ 0.030 -0.048 0.109 0.077 0.757 0.449
frequ ~~ frequ 0.462 0.301 0.624 1.000 5.624 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (current-self) is not significantly different from zero, b = 0.03, p = 0.449.

6.6.6.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8275.271 8363.201 0.978 0.042 0.039
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.075 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.481 NA NA
d_energ_1 ~1 0.057 0.017 0.096 0.375 2.826 0.005
energ_t1 ~1 3.229 3.124 3.335 9.552 59.987 0.000
d_energ_1 ~~ d_energ_1 0.020 -0.002 0.042 0.879 1.798 0.072
energ_t1 ~~ d_energ_1 -0.011 -0.024 0.003 -0.254 -1.545 0.122
d_energ_1 ~ sb07_03_t1 0.053 0.019 0.086 0.348 3.074 0.002
sb07_03_t1 ~~ sb07_03_t1 0.996 0.871 1.122 1.000 15.560 0.000

The moderation effect of the facet-specific change goal with the energy change score (current-self) is not significantly different from zero, b = 0.053, p = 0.002.

6.6.6.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9648.964 9763.655 0.968 0.045 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.077 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA
d_energ_1 ~1 0.058 0.017 0.099 0.370 2.798 0.005
energ_t1 ~1 3.229 3.120 3.337 9.266 58.475 0.000
d_energ_1 ~~ d_energ_1 0.023 -0.002 0.048 0.929 1.816 0.069
energ_t1 ~~ d_energ_1 -0.023 -0.044 -0.001 -0.430 -2.089 0.037
energ_t1 ~ frequ 0.063 -0.030 0.155 0.121 1.332 0.183
d_energ_1 ~ frequ 0.062 0.003 0.122 0.267 2.074 0.038
frequ ~~ frequ 0.453 0.289 0.617 1.000 5.407 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (current-self) is not significantly different from zero (at p < . 001), b = 0.062, p = 0.038.

6.6.6.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8044.767 8132.697 0.969 0.043 0.044
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.132 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.462 NA NA
d_compa_1 ~1 0.102 0.041 0.163 0.411 3.270 0.001
compa_t1 ~1 4.183 4.093 4.273 6.885 90.965 0.000
d_compa_1 ~~ d_compa_1 0.057 0.004 0.111 0.933 2.117 0.034
compa_t1 ~~ d_compa_1 -0.058 -0.102 -0.014 -0.422 -2.561 0.010
d_compa_1 ~ sb07_04_t1 0.064 0.000 0.129 0.259 1.957 0.050
sb07_04_t1 ~~ sb07_04_t1 0.997 0.899 1.095 1.000 19.989 0.000

The moderation effect of the facet-specific change goal with the compassion change score (current-self) is not significantly different from zero, b = 0.064, p = 0.05.

6.6.6.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9371.88 9486.571 0.932 0.062 0.07
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.133 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.464 NA NA
d_compa_1 ~1 0.103 0.040 0.165 0.409 3.237 0.001
compa_t1 ~1 4.183 4.090 4.276 6.834 88.071 0.000
d_compa_1 ~~ d_compa_1 0.063 0.007 0.119 0.998 2.207 0.027
compa_t1 ~~ d_compa_1 -0.075 -0.125 -0.024 -0.507 -2.897 0.004
compa_t1 ~ frequ 0.247 0.078 0.417 0.278 2.855 0.004
d_compa_1 ~ frequ 0.015 -0.101 0.132 0.042 0.258 0.796
frequ ~~ frequ 0.473 0.306 0.640 1.000 5.544 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (current-self) is not significantly different from zero, b = 0.015, p = 0.796.

6.6.6.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6952.741 7040.671 0.951 0.064 0.062
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.166 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.637 NA NA
d_respe_1 ~1 0.020 -0.037 0.077 0.064 0.694 0.488
respe_t1 ~1 4.474 4.400 4.549 7.827 117.737 0.000
d_respe_1 ~~ d_respe_1 0.096 0.032 0.159 0.982 2.950 0.003
respe_t1 ~~ d_respe_1 -0.083 -0.141 -0.024 -0.508 -2.774 0.006
d_respe_1 ~ sb07_05_t1 0.042 -0.023 0.106 0.133 1.261 0.207
sb07_05_t1 ~~ sb07_05_t1 0.997 0.877 1.117 1.000 16.293 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (current-self) is not significantly different from zero, b = 0.042, p = 0.207.

6.6.6.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8294.572 8409.263 0.954 0.056 0.06
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.167 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.639 NA NA
d_respe_1 ~1 0.018 -0.039 0.074 0.057 0.613 0.540
respe_t1 ~1 4.474 4.395 4.552 7.847 111.809 0.000
d_respe_1 ~~ d_respe_1 0.093 0.030 0.157 0.956 2.888 0.004
respe_t1 ~~ d_respe_1 -0.080 -0.142 -0.018 -0.485 -2.519 0.012
respe_t1 ~ frequ 0.263 0.130 0.396 0.316 3.880 0.000
d_respe_1 ~ frequ -0.096 -0.187 -0.005 -0.211 -2.067 0.039
frequ ~~ frequ 0.468 0.309 0.628 1.000 5.753 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = -0.096, p = 0.039.

6.6.6.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8326.839 8414.769 0.95 0.059 0.056
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.073 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.514 NA NA
d_trust_1 ~1 0.101 0.026 0.175 0.321 2.648 0.008
trust_t1 ~1 3.161 3.038 3.285 4.824 50.165 0.000
d_trust_1 ~~ d_trust_1 0.094 0.016 0.172 0.958 2.372 0.018
trust_t1 ~~ d_trust_1 -0.069 -0.131 -0.008 -0.352 -2.201 0.028
d_trust_1 ~ sb07_06_t1 0.065 -0.012 0.141 0.205 1.648 0.099
sb07_06_t1 ~~ sb07_06_t1 0.997 0.903 1.091 1.000 20.862 0.000

The moderation effect of the facet-specific change goal with the trust change score (current-self) is not significantly different from zero, b = 0.065, p = 0.099.

6.6.6.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9646.939 9761.631 0.966 0.045 0.058
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.077 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.503 NA NA
d_trust_1 ~1 0.091 0.014 0.168 0.313 2.326 0.020
trust_t1 ~1 3.166 3.042 3.290 5.071 50.012 0.000
d_trust_1 ~~ d_trust_1 0.085 0.005 0.166 1.000 2.073 0.038
trust_t1 ~~ d_trust_1 -0.069 -0.136 -0.002 -0.384 -2.032 0.042
trust_t1 ~ frequ 0.116 -0.048 0.279 0.127 1.387 0.165
d_trust_1 ~ frequ -0.001 -0.106 0.104 -0.002 -0.013 0.990
frequ ~~ frequ 0.466 0.305 0.628 1.000 5.656 0.000

The moderation effect of the self-improvement behaviors with the trust change score (current-self) is not significantly different from zero, b = -0.001, p = 0.99.

6.6.6.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7716.53 7804.46 0.957 0.076 0.043
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.016 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.446 NA NA
d_organ_1 ~1 0.096 0.009 0.184 0.196 2.157 0.031
organ_t1 ~1 3.142 3.026 3.258 2.812 53.083 0.000
d_organ_1 ~~ d_organ_1 0.234 0.087 0.381 0.971 3.126 0.002
organ_t1 ~~ d_organ_1 -0.078 -0.173 0.016 -0.192 -1.622 0.105
d_organ_1 ~ sb07_07_t1 0.083 0.000 0.167 0.170 1.971 0.049
sb07_07_t1 ~~ sb07_07_t1 0.997 0.909 1.084 1.000 22.378 0.000

The moderation effect of the facet-specific change goal with the organization change score (current-self) is not significantly different from zero, b = 0.083, p = 0.049.

6.6.6.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9172.423 9287.114 0.977 0.047 0.04
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.454 NA NA
d_organ_1 ~1 0.088 0.006 0.170 0.192 2.093 0.036
organ_t1 ~1 3.144 2.997 3.292 3.067 41.801 0.000
d_organ_1 ~~ d_organ_1 0.210 0.081 0.339 0.998 3.193 0.001
organ_t1 ~~ d_organ_1 -0.122 -0.217 -0.027 -0.262 -2.513 0.012
organ_t1 ~ frequ 0.197 -0.025 0.419 0.131 1.742 0.082
d_organ_1 ~ frequ 0.026 -0.110 0.162 0.039 0.378 0.706
frequ ~~ frequ 0.467 0.303 0.631 1.000 5.590 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (current-self) is not significantly different from zero, b = 0.026, p = 0.706.

6.6.6.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7761.297 7849.227 0.953 0.075 0.055
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.019 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.651 NA NA
d_produ_1 ~1 0.166 0.077 0.256 0.274 3.630 0.000
produ_t1 ~1 2.583 2.467 2.699 2.720 43.744 0.000
d_produ_1 ~~ d_produ_1 0.362 0.183 0.542 0.984 3.962 0.000
produ_t1 ~~ d_produ_1 -0.154 -0.241 -0.067 -0.350 -3.479 0.001
d_produ_1 ~ sb07_08_t1 0.077 -0.016 0.170 0.126 1.615 0.106
sb07_08_t1 ~~ sb07_08_t1 0.997 0.866 1.127 1.000 14.989 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (current-self) is not significantly different from zero, b = 0.077, p = 0.106.

6.6.6.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9207.478 9322.17 0.956 0.062 0.053
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.022 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.657 NA NA
d_produ_1 ~1 0.162 0.072 0.253 0.271 3.523 0.000
produ_t1 ~1 2.583 2.450 2.717 2.770 37.950 0.000
d_produ_1 ~~ d_produ_1 0.354 0.172 0.536 0.985 3.822 0.000
produ_t1 ~~ d_produ_1 -0.206 -0.308 -0.104 -0.373 -3.966 0.000
produ_t1 ~ frequ 0.152 -0.060 0.365 0.111 1.406 0.160
d_produ_1 ~ frequ 0.110 -0.050 0.269 0.124 1.349 0.177
frequ ~~ frequ 0.462 0.297 0.627 1.000 5.492 0.000

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (current-self) is not significantly different from zero, b = 0.11, p = 0.177.

6.6.6.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8011.811 8099.741 0.922 0.082 0.077
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.550 NA NA
d_respo_1 ~1 0.057 0.007 0.107 0.224 2.233 0.026
respo_t1 ~1 3.599 3.496 3.702 7.465 68.338 0.000
d_respo_1 ~~ d_respo_1 0.064 0.013 0.114 0.985 2.450 0.014
respo_t1 ~~ d_respo_1 -0.035 -0.068 -0.002 -0.323 -2.084 0.037
d_respo_1 ~ sb07_09_t1 0.031 -0.019 0.080 0.120 1.220 0.222
sb07_09_t1 ~~ sb07_09_t1 0.997 0.913 1.080 1.000 23.307 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.031, p = 0.222.

6.6.6.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9386.464 9501.155 0.921 0.074 0.08
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.551 NA NA
d_respo_1 ~1 0.057 0.005 0.110 0.221 2.158 0.031
respo_t1 ~1 3.598 3.493 3.703 7.308 67.244 0.000
d_respo_1 ~~ d_respo_1 0.068 0.012 0.123 1.000 2.379 0.017
respo_t1 ~~ d_respo_1 -0.044 -0.083 -0.004 -0.342 -2.161 0.031
respo_t1 ~ frequ 0.048 -0.074 0.169 0.066 0.771 0.441
d_respo_1 ~ frequ 0.001 -0.088 0.089 0.002 0.014 0.989
frequ ~~ frequ 0.465 0.302 0.629 1.000 5.570 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (current-self) is not significantly different from zero, b = 0.001, p = 0.989.

6.6.6.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8004.403 8092.333 0.993 0.026 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.026 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.473 NA NA
d_anxie_1 ~1 -0.212 -0.296 -0.127 -0.497 -4.918 0.000
anxie_t1 ~1 3.248 3.129 3.367 3.509 53.651 0.000
d_anxie_1 ~~ d_anxie_1 0.159 0.060 0.258 0.872 3.159 0.002
anxie_t1 ~~ d_anxie_1 -0.019 -0.094 0.056 -0.069 -0.497 0.619
d_anxie_1 ~ sb07_10_t1 -0.153 -0.240 -0.066 -0.358 -3.448 0.001
sb07_10_t1 ~~ sb07_10_t1 0.998 0.895 1.101 1.000 18.979 0.000

The frequency of self-improvement behaviors significantly moderates changes in anxiety (current-self), b = -0.153, p = 0.001.

6.6.6.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9455.421 9570.113 0.977 0.04 0.046
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.029 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.472 NA NA
d_anxie_1 ~1 -0.217 -0.306 -0.128 -0.502 -4.795 0.000
anxie_t1 ~1 3.252 3.117 3.387 3.448 47.242 0.000
d_anxie_1 ~~ d_anxie_1 0.185 0.074 0.296 0.992 3.273 0.001
anxie_t1 ~~ d_anxie_1 -0.118 -0.223 -0.012 -0.290 -2.185 0.029
anxie_t1 ~ frequ 0.026 -0.193 0.245 0.019 0.234 0.815
d_anxie_1 ~ frequ -0.058 -0.212 0.096 -0.092 -0.736 0.462
frequ ~~ frequ 0.470 0.304 0.637 1.000 5.553 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (current-self) is not significantly different from zero, b = -0.058, p = 0.462.

6.6.6.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7863.828 7951.758 0.956 0.079 0.055
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.055 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.583 NA NA
d_depre_1 ~1 -0.112 -0.171 -0.053 -0.310 -3.718 0.000
depre_t1 ~1 2.960 2.849 3.071 4.533 52.266 0.000
d_depre_1 ~~ d_depre_1 0.127 0.065 0.189 0.972 4.005 0.000
depre_t1 ~~ d_depre_1 -0.058 -0.100 -0.015 -0.369 -2.639 0.008
d_depre_1 ~ sb07_11_t1 -0.060 -0.111 -0.009 -0.166 -2.306 0.021
sb07_11_t1 ~~ sb07_11_t1 0.996 0.924 1.069 1.000 26.876 0.000

The moderation effect of the facet-specific change goal with the depression change score (current-self) is not significantly different from zero, b = -0.06, p = 0.021.

6.6.6.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9409.123 9523.815 0.928 0.084 0.079
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.057 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.588 NA NA
d_depre_1 ~1 -0.117 -0.179 -0.056 -0.316 -3.723 0.000
depre_t1 ~1 2.963 2.842 3.084 4.429 48.089 0.000
d_depre_1 ~~ d_depre_1 0.138 0.069 0.207 0.996 3.942 0.000
depre_t1 ~~ d_depre_1 -0.092 -0.146 -0.038 -0.372 -3.353 0.001
depre_t1 ~ frequ 0.014 -0.135 0.163 0.014 0.181 0.857
d_depre_1 ~ frequ -0.034 -0.127 0.060 -0.062 -0.707 0.479
frequ ~~ frequ 0.467 0.300 0.633 1.000 5.497 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (current-self) is not significantly different from zero, b = -0.034, p = 0.479.

6.6.6.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8098.622 8186.552 0.989 0.036 0.032
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.159 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.666 NA NA
d_volat_1 ~1 -0.179 -0.268 -0.090 -0.313 -3.954 0.000
volat_t1 ~1 3.118 2.985 3.250 3.136 46.173 0.000
d_volat_1 ~~ d_volat_1 0.325 0.197 0.454 0.995 4.971 0.000
volat_t1 ~~ d_volat_1 -0.276 -0.382 -0.170 -0.519 -5.092 0.000
d_volat_1 ~ sb07_12_t1 -0.040 -0.133 0.054 -0.069 -0.829 0.407
sb07_12_t1 ~~ sb07_12_t1 0.997 0.906 1.088 1.000 21.428 0.000

The moderation effect of the facet-specific change goal with the volatility change score (current-self) is not significantly different from zero, b = -0.04, p = 0.407.

6.6.6.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9453.177 9567.869 1 0 0.028
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.158 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.664 NA NA
d_volat_1 ~1 -0.177 -0.265 -0.089 -0.313 -3.936 0.000
volat_t1 ~1 3.117 2.978 3.256 3.161 43.892 0.000
d_volat_1 ~~ d_volat_1 0.320 0.194 0.446 0.998 4.965 0.000
volat_t1 ~~ d_volat_1 -0.283 -0.387 -0.178 -0.507 -5.287 0.000
volat_t1 ~ frequ -0.050 -0.262 0.161 -0.035 -0.466 0.641
d_volat_1 ~ frequ 0.040 -0.123 0.204 0.049 0.481 0.631
frequ ~~ frequ 0.468 0.306 0.630 1.000 5.651 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (current-self) is significantly different from zero, b = 0.04, p = 0.631.

6.6.6.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7926.527 8014.457 0.994 0.02 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.992 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.434 NA NA
d_curio_1 ~1 0.038 -0.010 0.086 0.198 1.562 0.118
curio_t1 ~1 4.182 4.097 4.266 9.476 97.097 0.000
d_curio_1 ~~ d_curio_1 0.034 -0.003 0.071 0.913 1.791 0.073
curio_t1 ~~ d_curio_1 -0.008 -0.037 0.021 -0.107 -0.548 0.584
d_curio_1 ~ sb07_13_t1 0.057 0.008 0.107 0.296 2.264 0.024
sb07_13_t1 ~~ sb07_13_t1 0.997 0.886 1.109 1.000 17.525 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (current-self) is not significantly different from zero, b = 0.057, p = 0.024.

6.6.6.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9256.658 9371.35 0.981 0.033 0.051
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.993 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.429 NA NA
d_curio_1 ~1 0.037 -0.011 0.086 0.196 1.518 0.129
curio_t1 ~1 4.182 4.095 4.269 9.450 93.719 0.000
d_curio_1 ~~ d_curio_1 0.031 -0.005 0.068 0.861 1.709 0.088
curio_t1 ~~ d_curio_1 -0.020 -0.051 0.011 -0.258 -1.280 0.201
curio_t1 ~ frequ 0.065 -0.052 0.183 0.101 1.091 0.275
d_curio_1 ~ frequ 0.104 0.024 0.185 0.373 2.531 0.011
frequ ~~ frequ 0.466 0.302 0.630 1.000 5.559 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (current-self) is not significantly different from zero (at p < .001), b = 0.104, p = 0.011.

6.6.6.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8167.561 8255.491 0.999 0.01 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 0.007 -0.011 0.026 0.074 0.767 0.443
aesth_t1 ~1 3.066 2.942 3.190 15.137 48.480 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.025 1.000 1.223 0.221
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.245 -1.053 0.293
d_aesth_1 ~ sb07_14_t1 -0.002 -0.020 0.016 -0.019 -0.205 0.838
sb07_14_t1 ~~ sb07_14_t1 0.997 0.907 1.087 1.000 21.634 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (current-self) is not significantly different from zero, b = -0.002, p = 0.838.

6.6.6.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9473.658 9588.349 0.99 0.028 0.047
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 0.007 -0.011 0.026 0.075 0.776 0.438
aesth_t1 ~1 3.066 2.942 3.190 14.944 48.467 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.006 0.026 0.997 1.236 0.217
aesth_t1 ~~ d_aesth_1 -0.005 -0.014 0.004 -0.238 -1.038 0.299
aesth_t1 ~ frequ 0.065 -0.006 0.135 0.216 1.806 0.071
d_aesth_1 ~ frequ -0.008 -0.039 0.023 -0.053 -0.490 0.624
frequ ~~ frequ 0.466 0.299 0.633 1.000 5.463 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (current-self) is not significantly different from zero, b = -0.008, p = 0.624.

6.6.6.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7740.569 7828.499 0.951 0.065 0.053
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.020 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.481 NA NA
d_imagi_1 ~1 0.111 0.046 0.176 0.328 3.337 0.001
imagi_t1 ~1 3.645 3.547 3.744 5.075 72.507 0.000
d_imagi_1 ~~ d_imagi_1 0.114 0.042 0.187 0.999 3.106 0.002
imagi_t1 ~~ d_imagi_1 -0.065 -0.126 -0.003 -0.284 -2.054 0.040
d_imagi_1 ~ sb07_15_t1 0.011 -0.054 0.075 0.031 0.322 0.748
sb07_15_t1 ~~ sb07_15_t1 0.997 0.908 1.086 1.000 21.908 0.000

The moderation effect of the facet-specific change goal with the imagination change score (current-self) is not significantly different from zero, b = 0.011, p = 0.748.

6.6.6.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9075.154 9189.845 0.962 0.052 0.052
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.023 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.488 NA NA
d_imagi_1 ~1 0.110 0.044 0.177 0.317 3.243 0.001
imagi_t1 ~1 3.644 3.544 3.744 4.989 71.301 0.000
d_imagi_1 ~~ d_imagi_1 0.119 0.045 0.194 0.984 3.143 0.002
imagi_t1 ~~ d_imagi_1 -0.080 -0.146 -0.014 -0.327 -2.385 0.017
imagi_t1 ~ frequ 0.255 0.078 0.432 0.237 2.821 0.005
d_imagi_1 ~ frequ 0.065 -0.050 0.179 0.126 1.107 0.268
frequ ~~ frequ 0.460 0.302 0.618 1.000 5.707 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (current-self) is not significantly different from zero, b = 0.065, p = 0.268.

6.6.7 Big Five facets (current self - follow-up T3)

6.6.7.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6792.921 6877.565 0.965 0.066 0.049
# parameters of interest
params_lcs_socia_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.974 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.047 -0.018 0.113 0.131 1.422 0.155
socia_t2 ~1 3.069 2.944 3.194 4.150 48.000 0.000
d_socia_1 ~~ d_socia_1 0.129 0.059 0.200 0.995 3.602 0.000
socia_t2 ~~ d_socia_1 -0.042 -0.095 0.011 -0.176 -1.537 0.124
d_socia_1 ~ sb07_01_t1 0.025 -0.051 0.101 0.069 0.645 0.519
sb07_01_t1 ~~ sb07_01_t1 0.991 0.858 1.124 1.000 14.600 0.000

The moderation effect of the facet-specific change goal with the sociability change score (current-self) from T2 to T3 is not significantly different from zero, b = 0.025, p = 0.519.

6.6.7.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8288.897 8399.302 0.954 0.067 0.069
# parameters of interest
params_lcs_socia_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.973 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.047 -0.017 0.111 0.133 1.438 0.150
socia_t2 ~1 3.059 2.925 3.193 4.242 44.839 0.000
d_socia_1 ~~ d_socia_1 0.124 0.054 0.193 0.998 3.460 0.001
socia_t2 ~~ d_socia_1 -0.047 -0.103 0.009 -0.186 -1.640 0.101
socia_t2 ~ frequ 0.026 -0.142 0.194 0.025 0.303 0.762
d_socia_1 ~ frequ -0.021 -0.127 0.084 -0.042 -0.396 0.692
frequ ~~ frequ 0.470 0.303 0.636 1.000 5.524 0.000

The moderation effect of the frequency of self-improvement behaviors with the sociability change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.021, p = 0.692.

6.6.7.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7108.32 7192.964 0.962 0.059 0.05
# parameters of interest
params_lcs_asser_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.001 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.494 NA NA
d_asser_1 ~1 0.020 -0.029 0.070 0.075 0.809 0.419
asser_t2 ~1 3.171 3.051 3.292 5.765 51.672 0.000
d_asser_1 ~~ d_asser_1 0.073 0.006 0.139 0.983 2.138 0.033
asser_t2 ~~ d_asser_1 -0.033 -0.070 0.004 -0.226 -1.728 0.084
d_asser_1 ~ sb07_02_t1 0.035 -0.017 0.088 0.129 1.308 0.191
sb07_02_t1 ~~ sb07_02_t1 0.997 0.878 1.117 1.000 16.348 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.035, p = 0.191.

6.6.7.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8541.799 8652.204 0.992 0.026 0.043
# parameters of interest
params_lcs_asser_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.000 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.505 NA NA
d_asser_1 ~1 0.019 -0.024 0.061 0.074 0.861 0.389
asser_t2 ~1 3.174 3.051 3.298 6.356 50.321 0.000
d_asser_1 ~~ d_asser_1 0.064 0.006 0.121 1.000 2.166 0.030
asser_t2 ~~ d_asser_1 -0.032 -0.063 -0.001 -0.260 -1.998 0.046
asser_t2 ~ frequ 0.189 0.072 0.306 0.257 3.160 0.002
d_asser_1 ~ frequ -0.001 -0.076 0.073 -0.004 -0.036 0.971
frequ ~~ frequ 0.461 0.302 0.621 1.000 5.669 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.001, p = 0.971.

6.6.7.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7092.565 7177.209 0.962 0.057 0.062
# parameters of interest
params_lcs_energ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.016 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.619 NA NA
d_energ_1 ~1 0.002 -0.025 0.029 0.013 0.154 0.877
energ_t2 ~1 3.299 3.187 3.411 12.272 57.685 0.000
d_energ_1 ~~ d_energ_1 0.027 -0.004 0.057 1.000 1.720 0.085
energ_t2 ~~ d_energ_1 -0.015 -0.033 0.004 -0.353 -1.538 0.124
d_energ_1 ~ sb07_03_t1 -0.002 -0.026 0.023 -0.012 -0.152 0.879
sb07_03_t1 ~~ sb07_03_t1 1.014 0.879 1.149 1.000 14.753 0.000

The moderation effect of the facet-specific change goal with the energy change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.002, p = 0.879.

6.6.7.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8544.934 8655.339 0.957 0.056 0.063
# parameters of interest
params_lcs_energ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.620 NA NA
d_energ_1 ~1 0.003 -0.027 0.033 0.015 0.172 0.863
energ_t2 ~1 3.300 3.188 3.413 11.273 57.411 0.000
d_energ_1 ~~ d_energ_1 0.032 -0.004 0.067 1.000 1.751 0.080
energ_t2 ~~ d_energ_1 -0.017 -0.038 0.003 -0.343 -1.640 0.101
energ_t2 ~ frequ 0.121 0.000 0.241 0.276 1.965 0.049
d_energ_1 ~ frequ -0.005 -0.064 0.055 -0.018 -0.155 0.877
frequ ~~ frequ 0.451 0.290 0.611 1.000 5.502 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.005, p = 0.877.

6.6.7.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6888.722 6973.366 0.947 0.06 0.062
# parameters of interest
params_lcs_compa_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.915 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.391 NA NA
d_compa_1 ~1 -0.051 -0.121 0.018 -0.193 -1.443 0.149
compa_t2 ~1 4.280 4.189 4.372 6.893 91.415 0.000
d_compa_1 ~~ d_compa_1 0.055 -0.032 0.143 0.790 1.245 0.213
compa_t2 ~~ d_compa_1 -0.014 -0.092 0.064 -0.098 -0.352 0.725
d_compa_1 ~ sb07_04_t1 -0.122 -0.206 -0.037 -0.458 -2.832 0.005
sb07_04_t1 ~~ sb07_04_t1 0.998 0.894 1.102 1.000 18.759 0.000

The moderation effect of the facet-specific change goal with the compassion change score from T2 to T3 (current-self) is not significantly different from zero (at p < . 001), b = -0.122, p = 0.005.

6.6.7.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8340.994 8451.399 0.926 0.068 0.081
# parameters of interest
params_lcs_compa_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.917 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.371 NA NA
d_compa_1 ~1 -0.058 -0.137 0.022 -0.215 -1.412 0.158
compa_t2 ~1 4.280 4.186 4.373 6.467 89.925 0.000
d_compa_1 ~~ d_compa_1 0.070 -0.033 0.174 0.977 1.329 0.184
compa_t2 ~~ d_compa_1 0.014 -0.083 0.112 0.087 0.292 0.770
compa_t2 ~ frequ 0.311 0.146 0.476 0.327 3.695 0.000
d_compa_1 ~ frequ -0.059 -0.168 0.050 -0.153 -1.058 0.290
frequ ~~ frequ 0.485 0.318 0.651 1.000 5.698 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.059, p = 0.29.

6.6.7.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 5983.266 6067.91 0.986 0.034 0.045
# parameters of interest
params_lcs_respe_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.918 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.366 NA NA
d_respe_1 ~1 0.005 -0.039 0.049 0.030 0.222 0.824
respe_t2 ~1 4.496 4.429 4.562 10.583 132.960 0.000
d_respe_1 ~~ d_respe_1 0.028 -0.005 0.062 0.990 1.680 0.093
respe_t2 ~~ d_respe_1 0.005 -0.020 0.030 0.072 0.388 0.698
d_respe_1 ~ sb07_05_t1 0.017 -0.027 0.061 0.101 0.758 0.448
sb07_05_t1 ~~ sb07_05_t1 1.010 0.883 1.136 1.000 15.617 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.017, p = 0.448.

6.6.7.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7434.27 7544.676 0.974 0.043 0.052
# parameters of interest
params_lcs_respe_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.917 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.367 NA NA
d_respe_1 ~1 0.006 -0.039 0.050 0.034 0.257 0.797
respe_t2 ~1 4.489 4.420 4.559 10.600 127.169 0.000
d_respe_1 ~~ d_respe_1 0.028 -0.005 0.061 0.970 1.651 0.099
respe_t2 ~~ d_respe_1 0.005 -0.020 0.031 0.079 0.411 0.681
respe_t2 ~ frequ 0.145 0.045 0.245 0.235 2.851 0.004
d_respe_1 ~ frequ -0.043 -0.111 0.025 -0.173 -1.232 0.218
frequ ~~ frequ 0.472 0.309 0.634 1.000 5.691 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.043, p = 0.218.

6.6.7.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7224.597 7309.241 0.965 0.051 0.053
# parameters of interest
params_lcs_trust_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.960 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.329 NA NA
d_trust_1 ~1 -0.009 -0.064 0.047 -0.048 -0.306 0.760
trust_t2 ~1 3.290 3.161 3.418 6.214 50.074 0.000
d_trust_1 ~~ d_trust_1 0.033 -0.012 0.077 0.998 1.448 0.148
trust_t2 ~~ d_trust_1 -0.005 -0.045 0.035 -0.053 -0.247 0.805
d_trust_1 ~ sb07_06_t1 -0.008 -0.067 0.050 -0.047 -0.283 0.777
sb07_06_t1 ~~ sb07_06_t1 1.007 0.908 1.107 1.000 19.773 0.000

The moderation effect of the facet-specific change goal with the trust change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.008, p = 0.777.

6.6.7.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8658.858 8769.264 0.97 0.044 0.06
# parameters of interest
params_lcs_trust_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.961 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.332 NA NA
d_trust_1 ~1 -0.008 -0.060 0.044 -0.046 -0.300 0.764
trust_t2 ~1 3.288 3.159 3.417 6.634 50.105 0.000
d_trust_1 ~~ d_trust_1 0.029 -0.010 0.069 0.998 1.460 0.144
trust_t2 ~~ d_trust_1 -0.005 -0.040 0.030 -0.061 -0.282 0.778
trust_t2 ~ frequ 0.125 -0.007 0.258 0.173 1.862 0.063
d_trust_1 ~ frequ 0.010 -0.079 0.100 0.042 0.229 0.819
frequ ~~ frequ 0.467 0.305 0.628 1.000 5.675 0.000

The moderation effect of the self-improvement behaviors with the trust change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.01, p = 0.819.

6.6.7.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6564.605 6649.249 0.965 0.07 0.04
# parameters of interest
params_lcs_organ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.027 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.466 NA NA
d_organ_1 ~1 0.073 -0.018 0.165 0.151 1.566 0.117
organ_t2 ~1 3.254 3.127 3.380 3.031 50.500 0.000
d_organ_1 ~~ d_organ_1 0.232 0.065 0.398 0.977 2.731 0.006
organ_t2 ~~ d_organ_1 -0.102 -0.215 0.012 -0.243 -1.761 0.078
d_organ_1 ~ sb07_07_t1 0.075 -0.010 0.160 0.153 1.725 0.085
sb07_07_t1 ~~ sb07_07_t1 0.992 0.898 1.086 1.000 20.736 0.000

The moderation effect of the facet-specific change goal with the organization change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.075, p = 0.085.

6.6.7.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8094.503 8204.908 0.974 0.051 0.043
# parameters of interest
params_lcs_organ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.022 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.467 NA NA
d_organ_1 ~1 0.073 -0.015 0.160 0.157 1.633 0.103
organ_t2 ~1 3.266 3.115 3.417 3.207 42.324 0.000
d_organ_1 ~~ d_organ_1 0.211 0.061 0.360 0.974 2.766 0.006
organ_t2 ~~ d_organ_1 -0.142 -0.245 -0.038 -0.306 -2.676 0.007
organ_t2 ~ frequ 0.226 0.019 0.432 0.150 2.138 0.032
d_organ_1 ~ frequ 0.111 -0.024 0.246 0.162 1.606 0.108
frequ ~~ frequ 0.461 0.299 0.623 1.000 5.562 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score from T2 to T3 (current-self) is not significantly different from zero (at p < .001), b = 0.111, p = 0.108.

6.6.7.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6695.442 6780.086 0.953 0.076 0.049
# parameters of interest
params_lcs_produ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.017 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 -0.016 -0.103 0.071 -0.030 -0.360 0.719
produ_t2 ~1 2.787 2.656 2.918 3.058 41.702 0.000
d_produ_1 ~~ d_produ_1 0.281 0.091 0.471 0.992 2.894 0.004
produ_t2 ~~ d_produ_1 -0.132 -0.258 -0.006 -0.328 -2.048 0.041
d_produ_1 ~ sb07_08_t1 0.047 -0.040 0.135 0.088 1.060 0.289
sb07_08_t1 ~~ sb07_08_t1 0.987 0.848 1.126 1.000 13.934 0.000

The moderation effect of the facet-specific change goal with the productiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.047, p = 0.289.

6.6.7.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8216.765 8327.17 0.946 0.071 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.011 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 -0.015 -0.101 0.072 -0.028 -0.327 0.743
produ_t2 ~1 2.789 2.645 2.933 3.142 38.028 0.000
d_produ_1 ~~ d_produ_1 0.268 0.087 0.450 0.987 2.904 0.004
produ_t2 ~~ d_produ_1 -0.134 -0.257 -0.010 -0.297 -2.124 0.034
produ_t2 ~ frequ 0.266 0.061 0.472 0.204 2.539 0.011
d_produ_1 ~ frequ -0.086 -0.235 0.063 -0.112 -1.132 0.257
frequ ~~ frequ 0.461 0.297 0.626 1.000 5.493 0.000

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.086, p = 0.257.

6.6.7.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6999.059 7083.703 0.92 0.08 0.074
# parameters of interest
params_lcs_respo_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.017 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.684 NA NA
d_respo_1 ~1 0.004 -0.056 0.064 0.011 0.132 0.895
respo_t2 ~1 3.684 3.574 3.794 7.022 65.848 0.000
d_respo_1 ~~ d_respo_1 0.124 0.027 0.220 0.993 2.507 0.012
respo_t2 ~~ d_respo_1 -0.060 -0.110 -0.010 -0.360 -2.370 0.018
d_respo_1 ~ sb07_09_t1 0.030 -0.033 0.092 0.084 0.924 0.356
sb07_09_t1 ~~ sb07_09_t1 1.003 0.913 1.093 1.000 21.798 0.000

The moderation effect of the facet-specific change goal with the responsibility change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.03, p = 0.356.

6.6.7.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8478.266 8588.671 0.932 0.067 0.074
# parameters of interest
params_lcs_respo_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.011 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.680 NA NA
d_respo_1 ~1 0.004 -0.059 0.067 0.010 0.117 0.907
respo_t2 ~1 3.680 3.570 3.791 6.707 65.147 0.000
d_respo_1 ~~ d_respo_1 0.136 0.026 0.246 1.000 2.429 0.015
respo_t2 ~~ d_respo_1 -0.071 -0.125 -0.017 -0.353 -2.579 0.010
respo_t2 ~ frequ 0.065 -0.083 0.214 0.081 0.862 0.389
d_respo_1 ~ frequ -0.006 -0.122 0.110 -0.012 -0.106 0.916
frequ ~~ frequ 0.465 0.301 0.629 1.000 5.562 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.006, p = 0.916.

6.6.7.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7054.177 7138.821 0.996 0.019 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.025 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.477 NA NA
d_anxie_1 ~1 -0.082 -0.165 0.000 -0.213 -1.971 0.049
anxie_t2 ~1 3.014 2.882 3.146 3.623 44.800 0.000
d_anxie_1 ~~ d_anxie_1 0.145 0.048 0.242 0.967 2.939 0.003
anxie_t2 ~~ d_anxie_1 -0.121 -0.201 -0.042 -0.442 -2.996 0.003
d_anxie_1 ~ sb07_10_t1 0.070 -0.009 0.149 0.182 1.732 0.083
sb07_10_t1 ~~ sb07_10_t1 1.018 0.910 1.125 1.000 18.545 0.000

The moderation effect of the facet-specific change goal with the responsibility change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.07, p = 0.083.

6.6.7.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8574.522 8684.927 0.976 0.041 0.048
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.033 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.484 NA NA
d_anxie_1 ~1 -0.085 -0.168 -0.002 -0.217 -2.012 0.044
anxie_t2 ~1 2.999 2.861 3.138 3.581 42.362 0.000
d_anxie_1 ~~ d_anxie_1 0.153 0.053 0.253 0.994 2.999 0.003
anxie_t2 ~~ d_anxie_1 -0.098 -0.180 -0.017 -0.300 -2.376 0.018
anxie_t2 ~ frequ -0.019 -0.223 0.185 -0.016 -0.183 0.855
d_anxie_1 ~ frequ 0.044 -0.105 0.194 0.077 0.582 0.561
frequ ~~ frequ 0.469 0.305 0.634 1.000 5.580 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.044, p = 0.561.

6.6.7.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6819.454 6904.098 0.97 0.065 0.054
# parameters of interest
params_lcs_depre_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.565 NA NA
d_depre_1 ~1 -0.038 -0.094 0.017 -0.115 -1.358 0.175
depre_t2 ~1 2.732 2.616 2.849 4.667 45.873 0.000
d_depre_1 ~~ d_depre_1 0.109 0.055 0.162 0.979 3.980 0.000
depre_t2 ~~ d_depre_1 -0.034 -0.063 -0.006 -0.239 -2.376 0.018
d_depre_1 ~ sb07_11_t1 -0.048 -0.101 0.005 -0.144 -1.762 0.078
sb07_11_t1 ~~ sb07_11_t1 1.001 0.925 1.077 1.000 25.943 0.000

The moderation effect of the facet-specific change goal with the depression change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.048, p = 0.078.

6.6.7.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8403.304 8513.709 0.936 0.08 0.086
# parameters of interest
params_lcs_depre_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.561 NA NA
d_depre_1 ~1 -0.038 -0.095 0.019 -0.113 -1.318 0.188
depre_t2 ~1 2.721 2.598 2.844 4.555 43.326 0.000
d_depre_1 ~~ d_depre_1 0.114 0.058 0.170 1.000 3.970 0.000
depre_t2 ~~ d_depre_1 -0.054 -0.088 -0.021 -0.270 -3.213 0.001
depre_t2 ~ frequ -0.005 -0.143 0.132 -0.006 -0.077 0.939
d_depre_1 ~ frequ -0.001 -0.091 0.089 -0.002 -0.022 0.982
frequ ~~ frequ 0.468 0.302 0.634 1.000 5.518 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.001, p = 0.982.

6.6.7.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7003.662 7088.306 0.989 0.034 0.033
# parameters of interest
params_lcs_volat_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.419 NA NA
d_volat_1 ~1 0.006 -0.077 0.090 0.016 0.146 0.884
volat_t2 ~1 2.949 2.817 3.081 3.239 43.762 0.000
d_volat_1 ~~ d_volat_1 0.140 0.032 0.248 0.960 2.533 0.011
volat_t2 ~~ d_volat_1 -0.046 -0.126 0.034 -0.144 -1.119 0.263
d_volat_1 ~ sb07_12_t1 -0.076 -0.164 0.012 -0.199 -1.692 0.091
sb07_12_t1 ~~ sb07_12_t1 0.999 0.901 1.097 1.000 19.963 0.000

The moderation effect of the facet-specific change goal with the volatility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.076, p = 0.091.

6.6.7.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8475.656 8586.061 1 0 0.031
# parameters of interest
params_lcs_volat_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.418 NA NA
d_volat_1 ~1 0.006 -0.078 0.089 0.015 0.132 0.895
volat_t2 ~1 2.951 2.813 3.089 3.270 41.853 0.000
d_volat_1 ~~ d_volat_1 0.141 0.034 0.249 0.992 2.574 0.010
volat_t2 ~~ d_volat_1 -0.070 -0.150 0.009 -0.207 -1.730 0.084
volat_t2 ~ frequ -0.016 -0.209 0.177 -0.012 -0.164 0.870
d_volat_1 ~ frequ -0.048 -0.187 0.090 -0.088 -0.686 0.493
frequ ~~ frequ 0.467 0.305 0.629 1.000 5.643 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.048, p = 0.493.

6.6.7.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6773.63 6858.274 0.994 0.021 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.105 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.421 NA NA
d_curio_1 ~1 -0.010 -0.057 0.037 -0.057 -0.416 0.677
curio_t2 ~1 4.189 4.098 4.280 9.125 90.402 0.000
d_curio_1 ~~ d_curio_1 0.031 -0.005 0.066 1.000 1.707 0.088
curio_t2 ~~ d_curio_1 -0.035 -0.067 -0.002 -0.446 -2.087 0.037
d_curio_1 ~ sb07_13_t1 -0.003 -0.054 0.049 -0.015 -0.102 0.919
sb07_13_t1 ~~ sb07_13_t1 0.997 0.876 1.117 1.000 16.250 0.000

The moderation effect of the facet-specific change goal with the curiosity change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.003, p = 0.919.

6.6.7.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8217.569 8327.974 0.976 0.039 0.053
# parameters of interest
params_lcs_curio_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.103 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.418 NA NA
d_curio_1 ~1 -0.010 -0.056 0.037 -0.056 -0.405 0.685
curio_t2 ~1 4.189 4.096 4.281 9.342 88.360 0.000
d_curio_1 ~~ d_curio_1 0.028 -0.004 0.061 0.979 1.697 0.090
curio_t2 ~~ d_curio_1 -0.030 -0.060 0.001 -0.405 -1.885 0.059
curio_t2 ~ frequ 0.166 0.041 0.291 0.252 2.600 0.009
d_curio_1 ~ frequ -0.036 -0.116 0.043 -0.146 -0.900 0.368
frequ ~~ frequ 0.466 0.300 0.631 1.000 5.499 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.036, p = 0.368.

6.6.7.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6953.911 7038.555 0.984 0.041 0.044
# parameters of interest
params_lcs_aesth_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.048 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.441 NA NA
d_aesth_1 ~1 0.012 -0.007 0.031 0.131 1.245 0.213
aesth_t2 ~1 3.142 3.007 3.277 14.384 45.564 0.000
d_aesth_1 ~~ d_aesth_1 0.008 -0.005 0.022 0.983 1.210 0.226
aesth_t2 ~~ d_aesth_1 -0.006 -0.016 0.004 -0.319 -1.254 0.210
d_aesth_1 ~ sb07_14_t1 0.012 -0.008 0.032 0.130 1.210 0.226
sb07_14_t1 ~~ sb07_14_t1 0.972 0.875 1.068 1.000 19.738 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.012, p = 0.226.

6.6.7.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8395.372 8505.777 0.971 0.051 0.05
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.047 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.440 NA NA
d_aesth_1 ~1 0.012 -0.007 0.031 0.133 1.254 0.210
aesth_t2 ~1 3.142 3.007 3.277 14.342 45.583 0.000
d_aesth_1 ~~ d_aesth_1 0.008 -0.005 0.022 0.997 1.216 0.224
aesth_t2 ~~ d_aesth_1 -0.006 -0.016 0.004 -0.310 -1.247 0.212
aesth_t2 ~ frequ 0.061 -0.013 0.135 0.191 1.616 0.106
d_aesth_1 ~ frequ -0.007 -0.038 0.024 -0.055 -0.466 0.641
frequ ~~ frequ 0.467 0.303 0.631 1.000 5.579 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.007, p = 0.641.

6.6.7.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6485.489 6570.133 0.95 0.069 0.063
# parameters of interest
params_lcs_imagi_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.147 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.577 NA NA
d_imagi_1 ~1 0.053 -0.015 0.121 0.146 1.516 0.129
imagi_t2 ~1 3.746 3.646 3.846 5.202 73.367 0.000
d_imagi_1 ~~ d_imagi_1 0.129 0.034 0.223 0.979 2.664 0.008
imagi_t2 ~~ d_imagi_1 -0.116 -0.196 -0.036 -0.473 -2.850 0.004
d_imagi_1 ~ sb07_15_t1 0.053 -0.016 0.121 0.144 1.502 0.133
sb07_15_t1 ~~ sb07_15_t1 0.992 0.896 1.088 1.000 20.155 0.000

The moderation effect of the facet-specific change goal with the imagination change score from T2 to T3 (current-self) is not significantly different from zero, b = 0.053, p = 0.133.

6.6.7.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7930.274 8040.679 0.959 0.057 0.059
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.146 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.578 NA NA
d_imagi_1 ~1 0.056 -0.014 0.126 0.154 1.576 0.115
imagi_t2 ~1 3.737 3.636 3.839 5.146 71.916 0.000
d_imagi_1 ~~ d_imagi_1 0.133 0.036 0.231 0.993 2.686 0.007
imagi_t2 ~~ d_imagi_1 -0.123 -0.207 -0.040 -0.489 -2.898 0.004
imagi_t2 ~ frequ 0.333 0.155 0.511 0.311 3.673 0.000
d_imagi_1 ~ frequ -0.044 -0.159 0.071 -0.082 -0.755 0.450
frequ ~~ frequ 0.461 0.303 0.618 1.000 5.731 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score from T2 to T3 (current-self) is not significantly different from zero, b = -0.044, p = 0.45.

6.6.8 Big Five facets (ideal self)

6.6.8.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7777.66 7865.591 0.96 0.042 0.046
# parameters of interest
params_lcs_socia_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.980 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.624 NA NA
d_socia_1 ~1 -0.030 -0.086 0.026 -0.113 -1.066 0.286
socia_t1 ~1 4.241 4.159 4.323 9.996 101.262 0.000
d_socia_1 ~~ d_socia_1 0.069 0.011 0.127 0.945 2.323 0.020
socia_t1 ~~ d_socia_1 -0.028 -0.061 0.005 -0.255 -1.649 0.099
d_socia_1 ~ sb07_01_t1 -0.064 -0.125 -0.002 -0.235 -2.023 0.043
sb07_01_t1 ~~ sb07_01_t1 0.997 0.874 1.120 1.000 15.898 0.000

The moderation effect of the facet-specific change goal with the sociability change score (ideal-self) is not significantly different from zero, b = -0.064, p = 0.043.

6.6.8.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9095.952 9210.643 0.953 0.046 0.056
# parameters of interest
params_lcs_socia_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.982 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.626 NA NA
d_socia_1 ~1 -0.032 -0.089 0.026 -0.115 -1.087 0.277
socia_t1 ~1 4.241 4.158 4.324 9.796 100.182 0.000
d_socia_1 ~~ d_socia_1 0.075 0.012 0.137 0.980 2.343 0.019
socia_t1 ~~ d_socia_1 -0.036 -0.074 0.002 -0.307 -1.867 0.062
socia_t1 ~ frequ 0.057 -0.059 0.174 0.091 0.964 0.335
d_socia_1 ~ frequ 0.056 -0.049 0.162 0.140 1.042 0.297
frequ ~~ frequ 0.472 0.309 0.635 1.000 5.660 0.000

The moderation effect of the frequency of self-improvement behaviors with sociability change score (ideal-self) is not significantly different from zero, b = 0.056, p = 0.297.

6.6.8.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7868.102 7956.032 0.946 0.048 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.974 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.629 NA NA
d_asser_1 ~1 -0.005 -0.044 0.035 -0.025 -0.242 0.808
asser_t1 ~1 4.145 4.065 4.226 13.460 100.494 0.000
d_asser_1 ~~ d_asser_1 0.040 -0.009 0.088 1.000 1.595 0.111
asser_t1 ~~ d_asser_1 -0.017 -0.042 0.008 -0.281 -1.346 0.178
d_asser_1 ~ sb07_02_t1 0.003 -0.039 0.045 0.016 0.148 0.882
sb07_02_t1 ~~ sb07_02_t1 0.997 0.883 1.111 1.000 17.182 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.003, p = 0.882.

6.6.8.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9154.226 9268.917 0.972 0.035 0.043
# parameters of interest
params_lcs_asser_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.978 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.653 NA NA
d_asser_1 ~1 -0.004 -0.043 0.035 -0.020 -0.205 0.837
asser_t1 ~1 4.145 4.064 4.226 13.499 100.349 0.000
d_asser_1 ~~ d_asser_1 0.042 -0.006 0.090 0.997 1.720 0.086
asser_t1 ~~ d_asser_1 -0.020 -0.045 0.005 -0.345 -1.593 0.111
asser_t1 ~ frequ 0.165 0.071 0.259 0.372 3.447 0.001
d_asser_1 ~ frequ 0.016 -0.047 0.079 0.054 0.493 0.622
frequ ~~ frequ 0.479 0.318 0.640 1.000 5.845 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.016, p = 0.622.

6.6.8.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7739.844 7827.774 0.949 0.039 0.046
# parameters of interest
params_lcs_energ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.802 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.569 NA NA
d_energ_1 ~1 -0.038 -0.075 -0.001 -0.317 -2.015 0.044
energ_t1 ~1 3.757 3.639 3.875 22.220 62.456 0.000
d_energ_1 ~~ d_energ_1 0.014 -0.007 0.036 0.991 1.312 0.189
energ_t1 ~~ d_energ_1 0.001 -0.008 0.010 0.050 0.215 0.830
d_energ_1 ~ sb07_03_t1 -0.012 -0.039 0.016 -0.096 -0.830 0.406
sb07_03_t1 ~~ sb07_03_t1 0.997 0.871 1.123 1.000 15.549 0.000

The moderation effect of the facet-specific change goal with the energy change score (ideal-self) is not significantly different from zero, b = -0.012, p = 0.406.

6.6.8.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9039.352 9154.044 0.967 0.034 0.046
# parameters of interest
params_lcs_energ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.813 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.551 NA NA
d_energ_1 ~1 -0.040 -0.076 -0.003 -0.330 -2.115 0.034
energ_t1 ~1 3.758 3.640 3.876 21.232 62.521 0.000
d_energ_1 ~~ d_energ_1 0.014 -0.006 0.035 0.991 1.374 0.169
energ_t1 ~~ d_energ_1 0.000 -0.010 0.010 0.009 0.037 0.971
energ_t1 ~ frequ 0.084 0.010 0.157 0.328 2.229 0.026
d_energ_1 ~ frequ 0.016 -0.037 0.070 0.095 0.604 0.546
frequ ~~ frequ 0.481 0.317 0.644 1.000 5.756 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (ideal-self) is not significantly different from zero, b = 0.016, p = 0.546.

6.6.8.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8182.787 8270.717 0.938 0.048 0.057
# parameters of interest
params_lcs_compa_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.980 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.429 NA NA
d_compa_1 ~1 -0.041 -0.111 0.029 -0.185 -1.144 0.253
compa_t1 ~1 4.225 4.131 4.319 8.384 88.346 0.000
d_compa_1 ~~ d_compa_1 0.045 -0.033 0.124 0.933 1.135 0.257
compa_t1 ~~ d_compa_1 -0.013 -0.071 0.046 -0.122 -0.428 0.669
d_compa_1 ~ sb07_04_t1 0.057 -0.013 0.127 0.259 1.601 0.109
sb07_04_t1 ~~ sb07_04_t1 0.997 0.899 1.095 1.000 19.987 0.000

The moderation effect of the facet-specific change goal with the compassion change score (ideal-self) is not significantly different from zero, b = 0.057, p = 0.109.

6.6.8.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9496.862 9611.554 0.941 0.048 0.066
# parameters of interest
params_lcs_compa_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.433 NA NA
d_compa_1 ~1 -0.042 -0.114 0.030 -0.185 -1.148 0.251
compa_t1 ~1 4.226 4.132 4.320 8.210 88.386 0.000
d_compa_1 ~~ d_compa_1 0.052 -0.031 0.134 0.999 1.230 0.219
compa_t1 ~~ d_compa_1 -0.021 -0.082 0.040 -0.186 -0.676 0.499
compa_t1 ~ frequ 0.178 0.063 0.294 0.240 3.021 0.003
d_compa_1 ~ frequ 0.011 -0.111 0.134 0.035 0.183 0.855
frequ ~~ frequ 0.480 0.314 0.645 1.000 5.672 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = 0.011, p = 0.855.

6.6.8.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6599.073 6687.003 0.966 0.041 0.046
# parameters of interest
params_lcs_respe_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA
d_respe_1 ~1 0.001 -0.049 0.050 0.002 0.020 0.984
respe_t1 ~1 4.710 4.650 4.770 11.954 154.464 0.000
d_respe_1 ~~ d_respe_1 0.058 0.019 0.097 0.997 2.940 0.003
respe_t1 ~~ d_respe_1 -0.044 -0.078 -0.010 -0.470 -2.522 0.012
d_respe_1 ~ sb07_05_t1 -0.013 -0.066 0.040 -0.053 -0.470 0.638
sb07_05_t1 ~~ sb07_05_t1 0.997 0.877 1.117 1.000 16.296 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.013, p = 0.638.

6.6.8.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7902.234 8016.925 0.969 0.039 0.05
# parameters of interest
params_lcs_respe_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA
d_respe_1 ~1 -0.001 -0.051 0.049 -0.004 -0.042 0.967
respe_t1 ~1 4.710 4.650 4.770 11.948 153.622 0.000
d_respe_1 ~~ d_respe_1 0.057 0.018 0.096 0.983 2.894 0.004
respe_t1 ~~ d_respe_1 -0.040 -0.073 -0.006 -0.442 -2.337 0.019
respe_t1 ~ frequ 0.180 0.099 0.262 0.321 4.351 0.000
d_respe_1 ~ frequ -0.045 -0.115 0.025 -0.131 -1.263 0.207
frequ ~~ frequ 0.490 0.324 0.657 1.000 5.782 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.045, p = 0.207.

6.6.8.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8006.571 8094.501 0.957 0.045 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.896 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.335 NA NA
d_trust_1 ~1 -0.062 -0.107 -0.018 -0.479 -2.745 0.006
trust_t1 ~1 4.100 4.007 4.192 11.773 86.712 0.000
d_trust_1 ~~ d_trust_1 0.016 -0.018 0.051 0.972 0.939 0.348
trust_t1 ~~ d_trust_1 0.006 -0.016 0.028 0.140 0.562 0.574
d_trust_1 ~ sb07_06_t1 0.022 -0.026 0.069 0.167 0.896 0.370
sb07_06_t1 ~~ sb07_06_t1 0.997 0.903 1.091 1.000 20.861 0.000

The moderation effect of the facet-specific change goal with the trust change score (ideal-self) is not significantly different from zero, b = 0.022, p = 0.37.

6.6.8.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9311.385 9426.076 0.974 0.035 0.046
# parameters of interest
params_lcs_trust_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.898 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.333 NA NA
d_trust_1 ~1 -0.062 -0.107 -0.017 -0.482 -2.701 0.007
trust_t1 ~1 4.100 4.007 4.192 11.845 86.645 0.000
d_trust_1 ~~ d_trust_1 0.016 -0.018 0.050 0.973 0.929 0.353
trust_t1 ~~ d_trust_1 0.008 -0.013 0.030 0.191 0.733 0.463
trust_t1 ~ frequ 0.139 0.049 0.229 0.275 3.015 0.003
d_trust_1 ~ frequ -0.031 -0.111 0.050 -0.163 -0.741 0.459
frequ ~~ frequ 0.469 0.308 0.630 1.000 5.701 0.000

The moderation effect of the self-improvement behaviors with the trust change score (ideal-self) is not significantly different from zero, b = -0.031, p = 0.459.

6.6.8.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7050.481 7138.411 0.762 0.086 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.978 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.720 NA NA
d_organ_1 ~1 0.019 -0.045 0.082 0.066 0.577 0.564
organ_t1 ~1 4.322 4.219 4.425 11.310 82.164 0.000
d_organ_1 ~~ d_organ_1 0.078 0.012 0.143 0.980 2.328 0.020
organ_t1 ~~ d_organ_1 -0.036 -0.084 0.013 -0.335 -1.434 0.151
d_organ_1 ~ sb07_07_t1 -0.040 -0.107 0.026 -0.143 -1.191 0.234
sb07_07_t1 ~~ sb07_07_t1 0.997 0.910 1.084 1.000 22.374 0.000

The moderation effect of the facet-specific change goal with the organization change score (ideal-self) is not significantly different from zero, b = -0.04, p = 0.234.

6.6.8.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8346.228 8460.919 0.871 0.068 0.081
# parameters of interest
params_lcs_organ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.985 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.712 NA NA
d_organ_1 ~1 0.021 -0.040 0.083 0.077 0.675 0.500
organ_t1 ~1 4.321 4.218 4.424 11.333 82.158 0.000
d_organ_1 ~~ d_organ_1 0.074 0.015 0.133 0.975 2.447 0.014
organ_t1 ~~ d_organ_1 -0.040 -0.087 0.007 -0.401 -1.674 0.094
organ_t1 ~ frequ 0.143 0.049 0.237 0.264 2.993 0.003
d_organ_1 ~ frequ 0.062 -0.029 0.153 0.158 1.333 0.182
frequ ~~ frequ 0.495 0.329 0.660 1.000 5.841 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (ideal-self) is not significantly different from zero (at p < .001), b = 0.062, p = 0.182.

6.6.8.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 5959.459 6047.389 0.916 0.071 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.883 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.578 NA NA
d_produ_1 ~1 -0.011 -0.059 0.036 -0.045 -0.472 0.637
produ_t1 ~1 4.403 4.325 4.482 11.505 109.438 0.000
d_produ_1 ~~ d_produ_1 0.061 0.008 0.114 0.975 2.252 0.024
produ_t1 ~~ d_produ_1 -0.009 -0.040 0.021 -0.101 -0.606 0.544
d_produ_1 ~ sb07_08_t1 -0.040 -0.083 0.003 -0.159 -1.820 0.069
sb07_08_t1 ~~ sb07_08_t1 0.997 0.867 1.127 1.000 14.992 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (ideal-self) is not significantly different from zero, b = -0.04, p = 0.069.

6.6.8.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7266.77 7381.461 0.932 0.062 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.885 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.580 NA NA
d_produ_1 ~1 -0.012 -0.059 0.036 -0.046 -0.478 0.633
produ_t1 ~1 4.404 4.325 4.483 11.556 108.976 0.000
d_produ_1 ~~ d_produ_1 0.062 0.009 0.115 0.992 2.274 0.023
produ_t1 ~~ d_produ_1 -0.013 -0.043 0.018 -0.137 -0.820 0.412
produ_t1 ~ frequ 0.111 0.032 0.190 0.201 2.754 0.006
d_produ_1 ~ frequ 0.031 -0.037 0.100 0.087 0.892 0.373
frequ ~~ frequ 0.479 0.314 0.644 1.000 5.678 0.000

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (ideal-self) is not significantly different from zero, b = 0.031, p = 0.373.

6.6.8.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7573.086 7661.016 0.935 0.055 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.019 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.664 NA NA
d_respo_1 ~1 -0.006 -0.043 0.031 -0.032 -0.328 0.743
respo_t1 ~1 4.188 4.080 4.297 14.275 75.458 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.031 0.042
respo_t1 ~~ d_respo_1 -0.020 -0.045 0.005 -0.355 -1.569 0.117
d_respo_1 ~ sb07_09_t1 -0.002 -0.043 0.039 -0.010 -0.095 0.924
sb07_09_t1 ~~ sb07_09_t1 0.997 0.913 1.081 1.000 23.300 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.924.

6.6.8.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8871.114 8985.805 0.94 0.053 0.056
# parameters of interest
params_lcs_respo_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.022 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.667 NA NA
d_respo_1 ~1 -0.006 -0.043 0.031 -0.030 -0.310 0.757
respo_t1 ~1 4.188 4.079 4.297 14.292 75.481 0.000
d_respo_1 ~~ d_respo_1 0.037 0.001 0.072 1.000 2.019 0.044
respo_t1 ~~ d_respo_1 -0.020 -0.044 0.004 -0.370 -1.598 0.110
respo_t1 ~ frequ 0.126 0.036 0.216 0.301 2.731 0.006
d_respo_1 ~ frequ -0.006 -0.068 0.057 -0.021 -0.179 0.858
frequ ~~ frequ 0.490 0.320 0.659 1.000 5.669 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.006, p = 0.858.

6.6.8.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7715.556 7803.486 0.949 0.031 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.874 NA NA
d_anxie_1 ~1 0.021 -0.027 0.070 0.083 0.861 0.389
anxie_t1 ~1 1.404 1.342 1.465 5.350 44.734 0.000
d_anxie_1 ~~ d_anxie_1 0.066 0.004 0.128 0.999 2.091 0.037
anxie_t1 ~~ d_anxie_1 -0.024 -0.052 0.004 -0.358 -1.686 0.092
d_anxie_1 ~ sb07_10_t1 0.009 -0.042 0.060 0.035 0.339 0.734
sb07_10_t1 ~~ sb07_10_t1 0.997 0.894 1.100 1.000 18.986 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.009, p = 0.734.

6.6.8.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9025.691 9140.382 0.938 0.042 0.056
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.885 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.879 NA NA
d_anxie_1 ~1 0.023 -0.027 0.074 0.086 0.901 0.367
anxie_t1 ~1 1.403 1.341 1.465 5.132 44.401 0.000
d_anxie_1 ~~ d_anxie_1 0.073 0.004 0.143 0.996 2.062 0.039
anxie_t1 ~~ d_anxie_1 -0.025 -0.057 0.006 -0.355 -1.564 0.118
anxie_t1 ~ frequ -0.101 -0.195 -0.007 -0.258 -2.102 0.036
d_anxie_1 ~ frequ 0.023 -0.060 0.106 0.060 0.549 0.583
frequ ~~ frequ 0.488 0.315 0.661 1.000 5.513 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.023, p = 0.583.

6.6.8.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6468.908 6556.838 0.899 0.069 0.066
# parameters of interest
params_lcs_depre_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA
d_depre_1 ~1 0.018 -0.021 0.058 0.073 0.902 0.367
depre_t1 ~1 1.546 1.476 1.616 5.305 43.283 0.000
d_depre_1 ~~ d_depre_1 0.062 0.017 0.106 0.995 2.735 0.006
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.467 -2.288 0.022
d_depre_1 ~ sb07_11_t1 0.017 -0.024 0.058 0.069 0.821 0.412
sb07_11_t1 ~~ sb07_11_t1 0.997 0.924 1.070 1.000 26.880 0.000

The moderation effect of the facet-specific change goal with the depression change score (ideal-self) is not significantly different from zero, b = 0.017, p = 0.412.

6.6.8.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7780.879 7895.57 0.905 0.067 0.075
# parameters of interest
params_lcs_depre_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA
d_depre_1 ~1 0.018 -0.022 0.058 0.072 0.889 0.374
depre_t1 ~1 1.545 1.475 1.616 5.252 43.261 0.000
d_depre_1 ~~ d_depre_1 0.063 0.017 0.109 0.998 2.709 0.007
depre_t1 ~~ d_depre_1 -0.034 -0.063 -0.005 -0.466 -2.289 0.022
depre_t1 ~ frequ -0.055 -0.134 0.024 -0.128 -1.353 0.176
d_depre_1 ~ frequ 0.015 -0.047 0.076 0.040 0.468 0.640
frequ ~~ frequ 0.477 0.310 0.644 1.000 5.596 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (ideal-self) is not significantly different from zero, b = 0.015, p = 0.64.

6.6.8.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7252.407 7340.337 0.97 0.035 0.042
# parameters of interest
params_lcs_volat_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.842 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.636 NA NA
d_volat_1 ~1 0.045 -0.016 0.106 0.143 1.448 0.148
volat_t1 ~1 1.599 1.523 1.675 3.819 41.366 0.000
d_volat_1 ~~ d_volat_1 0.098 0.019 0.178 0.985 2.432 0.015
volat_t1 ~~ d_volat_1 -0.013 -0.055 0.029 -0.099 -0.611 0.541
d_volat_1 ~ sb07_12_t1 0.039 -0.021 0.100 0.124 1.265 0.206
sb07_12_t1 ~~ sb07_12_t1 0.997 0.906 1.088 1.000 21.424 0.000

The moderation effect of the facet-specific change goal with the volatility change score (ideal-self) is not significantly different from zero, b = 0.039, p = 0.206.

6.6.8.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8559.956 8674.648 0.961 0.041 0.053
# parameters of interest
params_lcs_volat_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.841 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.635 NA NA
d_volat_1 ~1 0.045 -0.016 0.106 0.144 1.452 0.146
volat_t1 ~1 1.599 1.523 1.674 3.825 41.336 0.000
d_volat_1 ~~ d_volat_1 0.099 0.019 0.178 0.994 2.440 0.015
volat_t1 ~~ d_volat_1 -0.016 -0.058 0.027 -0.123 -0.729 0.466
volat_t1 ~ frequ -0.121 -0.212 -0.029 -0.202 -2.591 0.010
d_volat_1 ~ frequ -0.036 -0.134 0.062 -0.079 -0.713 0.476
frequ ~~ frequ 0.487 0.315 0.658 1.000 5.568 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (ideal-self) is not significantly different from zero, b = -0.036, p = 0.476.

6.6.8.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7929.001 8016.931 0.954 0.041 0.052
# parameters of interest
params_lcs_curio_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.469 NA NA
d_curio_1 ~1 0.024 -0.017 0.064 0.168 1.148 0.251
curio_t1 ~1 4.536 4.465 4.607 15.372 125.891 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.007 0.046 0.993 1.472 0.141
curio_t1 ~~ d_curio_1 -0.008 -0.025 0.010 -0.190 -0.878 0.380
d_curio_1 ~ sb07_13_t1 0.012 -0.029 0.053 0.084 0.569 0.569
sb07_13_t1 ~~ sb07_13_t1 0.997 0.886 1.109 1.000 17.527 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.012, p = 0.569.

6.6.8.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9239.834 9354.525 0.95 0.045 0.059
# parameters of interest
params_lcs_curio_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.977 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.459 NA NA
d_curio_1 ~1 0.024 -0.019 0.066 0.165 1.101 0.271
curio_t1 ~1 4.536 4.465 4.607 14.808 125.814 0.000
d_curio_1 ~~ d_curio_1 0.019 -0.009 0.048 0.934 1.338 0.181
curio_t1 ~~ d_curio_1 -0.009 -0.028 0.010 -0.215 -0.943 0.346
curio_t1 ~ frequ 0.038 -0.059 0.136 0.086 0.772 0.440
d_curio_1 ~ frequ 0.054 -0.019 0.128 0.258 1.446 0.148
frequ ~~ frequ 0.469 0.305 0.632 1.000 5.607 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.054, p = 0.148.

6.6.8.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8048.244 8136.174 0.989 0.027 0.045
# parameters of interest
params_lcs_aesth_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.985 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA
d_aesth_1 ~1 0.000 -0.003 0.003 0.002 0.015 0.988
aesth_t1 ~1 2.936 2.799 3.072 119.527 42.231 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.253 0.024
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.340 0.180
d_aesth_1 ~ sb07_14_t1 0.001 -0.002 0.003 0.045 0.430 0.667
sb07_14_t1 ~~ sb07_14_t1 0.997 0.907 1.087 1.000 21.634 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.001, p = 0.667.

6.6.8.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9363.848 9478.54 0.981 0.033 0.051
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.986 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA
d_aesth_1 ~1 0.000 -0.002 0.002 0.001 0.006 0.995
aesth_t1 ~1 2.936 2.799 3.072 145.257 42.182 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.273 0.023
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.403 0.161
aesth_t1 ~ frequ -0.006 -0.010 -0.002 -0.207 -2.735 0.006
d_aesth_1 ~ frequ 0.001 -0.003 0.004 0.044 0.401 0.689
frequ ~~ frequ 0.470 0.303 0.637 1.000 5.528 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.001, p = 0.689.

6.6.8.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7242.518 7330.448 0.889 0.067 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA
d_imagi_1 ~1 0.022 -0.028 0.072 0.083 0.854 0.393
imagi_t1 ~1 4.611 4.549 4.673 12.162 145.982 0.000
d_imagi_1 ~~ d_imagi_1 0.069 0.020 0.118 0.999 2.772 0.006
imagi_t1 ~~ d_imagi_1 -0.043 -0.082 -0.005 -0.435 -2.200 0.028
d_imagi_1 ~ sb07_15_t1 -0.010 -0.060 0.041 -0.036 -0.372 0.710
sb07_15_t1 ~~ sb07_15_t1 0.997 0.908 1.086 1.000 21.903 0.000

The moderation effect of the facet-specific change goal with the imagination change score (ideal-self) is not significantly different from zero, b = -0.01, p = 0.71.

6.6.8.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8546.95 8661.642 0.92 0.058 0.074
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.064 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.746 NA NA
d_imagi_1 ~1 0.020 -0.028 0.069 0.079 0.821 0.412
imagi_t1 ~1 4.612 4.550 4.673 12.468 146.635 0.000
d_imagi_1 ~~ d_imagi_1 0.067 0.020 0.114 1.000 2.795 0.005
imagi_t1 ~~ d_imagi_1 -0.042 -0.080 -0.004 -0.448 -2.140 0.032
imagi_t1 ~ frequ 0.116 0.029 0.204 0.216 2.609 0.009
d_imagi_1 ~ frequ 0.006 -0.092 0.105 0.017 0.124 0.901
frequ ~~ frequ 0.474 0.309 0.640 1.000 5.622 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.901.

6.6.9 Hyp 6: Effects summary

6.6.9.1 Summary: Current self

Collect all relevant effects

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6 <- df_table_hyp6_main %>% left_join(df_table_hyp6_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 0.098 0.335 0.000 0.085 0.173 0.209
extraversion frequency 0.096 0.333 0.001 0.113 0.265 0.005
agreeableness goals 0.020 0.100 0.261 0.042 0.139 0.205
agreeableness frequency 0.022 0.101 0.269 0.013 0.040 0.714
conscientiousness goals 0.106 0.256 0.000 0.048 0.093 0.195
conscientiousness frequency 0.103 0.252 0.000 0.043 0.072 0.398
neuroticism goals -0.179 -0.387 0.000 -0.106 -0.173 0.025
neuroticism frequency -0.180 -0.391 0.000 -0.035 -0.051 0.528
openness goals 0.080 0.299 0.001 0.009 0.020 0.839
openness frequency 0.077 0.291 0.001 0.041 0.106 0.288

No moderation effects that are significantly different from zero at p < .001. Only at p < .01 do we find a significant effect:

  • changes in current-level extraversion are moderated by the frequency of self-improvement behaviors

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 0.082 0.208 0.031 0.037 0.095 0.316
sociability frequency 0.073 0.193 0.046 0.198 0.359 0.000
assertiveness goals 0.065 0.232 0.014 -0.018 -0.066 0.462
assertiveness frequency 0.058 0.214 0.019 0.030 0.077 0.449
energy goals 0.057 0.375 0.005 0.053 0.348 0.002
energy frequency 0.058 0.370 0.005 0.062 0.267 0.038
compassion goals 0.102 0.411 0.001 0.064 0.259 0.050
compassion frequency 0.103 0.409 0.001 0.015 0.042 0.796
respectfulness goals 0.020 0.064 0.488 0.042 0.133 0.207
respectfulness frequency 0.018 0.057 0.540 -0.096 -0.211 0.039
trust goals 0.101 0.321 0.008 0.065 0.205 0.099
trust frequency 0.091 0.313 0.020 -0.001 -0.002 0.990
organization goals 0.096 0.196 0.031 0.083 0.170 0.049
organization frequency 0.088 0.192 0.036 0.026 0.039 0.706
productiveness goals 0.166 0.274 0.000 0.077 0.126 0.106
productiveness frequency 0.162 0.271 0.000 0.110 0.124 0.177
responsibility goals 0.057 0.224 0.026 0.031 0.120 0.222
responsibility frequency 0.057 0.221 0.031 0.001 0.002 0.989
anxiety goals -0.212 -0.497 0.000 -0.153 -0.358 0.001
anxiety frequency -0.217 -0.502 0.000 -0.058 -0.092 0.462
depression goals -0.112 -0.310 0.000 -0.060 -0.166 0.021
depression frequency -0.117 -0.316 0.000 -0.034 -0.062 0.479
volatility goals -0.179 -0.313 0.000 -0.040 -0.069 0.407
volatility frequency -0.177 -0.313 0.000 0.040 0.049 0.631
curiosity goals 0.038 0.198 0.118 0.057 0.296 0.024
curiosity frequency 0.037 0.196 0.129 0.104 0.373 0.011
aesthetic goals 0.007 0.074 0.443 -0.002 -0.019 0.838
aesthetic frequency 0.007 0.075 0.438 -0.008 -0.053 0.624
imagination goals 0.111 0.328 0.001 0.011 0.031 0.748
imagination frequency 0.110 0.317 0.001 0.065 0.126 0.268

Looking at the facets, we only find one moderator effect that significantly differ from zero (p < .001) and two other effects at p < .05:

  • Within extraversion, we find the effect for the frequency of self-improvement behaviors from above represented in the facet sociability, and at p < .05 in energy (but in the other, unexpected direction).
  • Within openness, change in the curiosity facet is moderated by the frequency of self-improvement behaviors (at p < .01).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses (only showing the moderation effects):

  • current = current-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of self-improvement behavior as moderator

Important: these are 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6.9.2 Summary: Ideal self

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_ideal_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_ideal_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6_ideal <- df_table_hyp6_ideal_main %>% left_join(df_table_hyp6_ideal_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals -0.019 -0.080 0.388 0.037 0.071 0.691
extraversion frequency -0.019 -0.079 0.393 0.035 0.103 0.351
agreeableness goals -0.030 -0.111 0.178 0.019 0.048 0.657
agreeableness frequency -0.030 -0.112 0.175 -0.032 -0.084 0.427
conscientiousness goals 0.009 0.035 0.673 -0.046 -0.136 0.145
conscientiousness frequency 0.010 0.037 0.658 0.031 0.082 0.323
neuroticism goals 0.042 0.116 0.123 0.071 0.142 0.129
neuroticism frequency 0.042 0.114 0.127 -0.004 -0.008 0.931
openness goals 0.016 0.109 0.258 0.000 0.000 0.999
openness frequency 0.017 0.110 0.259 0.011 0.049 0.659

No significant moderation effects at the domain level.

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals -0.030 -0.113 0.286 -0.064 -0.235 0.043
sociability frequency -0.032 -0.115 0.277 0.056 0.140 0.297
assertiveness goals -0.005 -0.025 0.808 0.003 0.016 0.882
assertiveness frequency -0.004 -0.020 0.837 0.016 0.054 0.622
energy goals -0.038 -0.317 0.044 -0.012 -0.096 0.406
energy frequency -0.040 -0.330 0.034 0.016 0.095 0.546
compassion goals -0.041 -0.185 0.253 0.057 0.259 0.109
compassion frequency -0.042 -0.185 0.251 0.011 0.035 0.855
respectfulness goals 0.001 0.002 0.984 -0.013 -0.053 0.638
respectfulness frequency -0.001 -0.004 0.967 -0.045 -0.131 0.207
trust goals -0.062 -0.479 0.006 0.022 0.167 0.370
trust frequency -0.062 -0.482 0.007 -0.031 -0.163 0.459
organization goals 0.019 0.066 0.564 -0.040 -0.143 0.234
organization frequency 0.021 0.077 0.500 0.062 0.158 0.182
productiveness goals -0.011 -0.045 0.637 -0.040 -0.159 0.069
productiveness frequency -0.012 -0.046 0.633 0.031 0.087 0.373
responsibility goals -0.006 -0.032 0.743 -0.002 -0.010 0.924
responsibility frequency -0.006 -0.030 0.757 -0.006 -0.021 0.858
anxiety goals 0.021 0.083 0.389 0.009 0.035 0.734
anxiety frequency 0.023 0.086 0.367 0.023 0.060 0.583
depression goals 0.018 0.073 0.367 0.017 0.069 0.412
depression frequency 0.018 0.072 0.374 0.015 0.040 0.640
volatility goals 0.045 0.143 0.148 0.039 0.124 0.206
volatility frequency 0.045 0.144 0.146 -0.036 -0.079 0.476
curiosity goals 0.024 0.168 0.251 0.012 0.084 0.569
curiosity frequency 0.024 0.165 0.271 0.054 0.258 0.148
aesthetic goals 0.000 0.002 0.988 0.001 0.045 0.667
aesthetic frequency 0.000 0.001 0.995 0.001 0.044 0.689
imagination goals 0.022 0.083 0.393 -0.010 -0.036 0.710
imagination frequency 0.020 0.079 0.412 0.006 0.017 0.901

No significant moderation effects at the facet level (at p < .001).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot_ideal <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot_ideal <- df_table_hyp6_plot_ideal %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses (only showing the moderation effects):

  • ideal = ideal-level personality
  • goals = specific, facet-level change goal(s) as moderator
  • frequency = frequency of self-improvement behavior as moderator

Important: these are 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp6_plot_ideal, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group

In the self-acceptance group, change in ideal-self ratings but not change in current-self ratings will be moderated by acceptance goals (both general and trait-/facet-specific goals) and the frequency of self-acceptance behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify acceptance goals (or the frequency of self-acceptance behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in ideal-self ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T! to T2
df_sbsa2_wide_pers_sa_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_mod <- df_sbsa2_wide_pers_sa_mod %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific change goals -> asked at T1
                                  "sa04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2_wide_pers_sa_mod_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_mod_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa_mod_fu)

df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod_fu)

6.7.1 Big Five traits (run models)

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in ideal self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

trait_template_mod_goal_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in ideal self (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current self
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current self ratings)

trait_template_mod_frequ_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal self (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), trait_model_fit))
}  

6.7.2 Big Five traits (ideal self)

6.7.2.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5751.678 5850.923 0.995 0.018 0.041
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.636 NA NA
d_extra_1 ~1 -0.020 -0.069 0.030 -0.076 -0.776 0.438
extra_t1 ~1 3.689 3.625 3.753 9.175 113.322 0.000
d_extra_1 ~~ d_extra_1 0.067 0.026 0.108 0.989 3.211 0.001
extra_t1 ~~ d_extra_1 -0.030 -0.055 -0.005 -0.291 -2.370 0.018
extra_t1 ~ goals 0.064 -0.053 0.180 0.102 1.069 0.285
d_extra_1 ~ goals -0.042 -0.136 0.053 -0.103 -0.859 0.390
goals ~~ goals 0.413 0.204 0.622 1.000 3.874 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal-self) is not significantly different from zero, b = -0.042, p = 0.39.

6.7.2.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5133.707 5232.952 0.988 0.031 0.043
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.987 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA
d_extra_1 ~1 -0.019 -0.068 0.031 -0.072 -0.731 0.465
extra_t1 ~1 3.689 3.625 3.752 9.238 113.309 0.000
d_extra_1 ~~ d_extra_1 0.066 0.026 0.106 0.999 3.227 0.001
extra_t1 ~~ d_extra_1 -0.032 -0.056 -0.008 -0.325 -2.588 0.010
extra_t1 ~ frequ 0.174 0.072 0.276 0.303 3.336 0.001
d_extra_1 ~ frequ 0.010 -0.075 0.095 0.026 0.224 0.823
frequ ~~ frequ 0.485 0.327 0.642 1.000 6.023 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal-self) is not significantly different from zero, b = 0.01, p = 0.823.

6.7.2.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5422.119 5521.364 0.989 0.038 0.04
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.013 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.623 NA NA
d_agree_1 ~1 0.006 -0.038 0.049 0.021 0.259 0.795
agree_t1 ~1 3.778 3.705 3.851 8.422 101.648 0.000
d_agree_1 ~~ d_agree_1 0.076 0.043 0.109 0.998 4.472 0.000
agree_t1 ~~ d_agree_1 -0.041 -0.066 -0.016 -0.335 -3.264 0.001
agree_t1 ~ goals -0.072 -0.159 0.016 -0.106 -1.610 0.107
d_agree_1 ~ goals -0.017 -0.097 0.063 -0.040 -0.410 0.682
goals ~~ goals 0.441 0.285 0.597 1.000 5.539 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal-self) is not significantly different from zero, b = -0.017, p = 0.682.

6.7.2.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4998.909 5098.154 0.993 0.029 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.622 NA NA
d_agree_1 ~1 0.006 -0.037 0.049 0.023 0.293 0.770
agree_t1 ~1 3.778 3.705 3.851 8.498 101.706 0.000
d_agree_1 ~~ d_agree_1 0.074 0.042 0.107 0.994 4.505 0.000
agree_t1 ~~ d_agree_1 -0.042 -0.067 -0.017 -0.357 -3.254 0.001
agree_t1 ~ frequ 0.157 0.060 0.255 0.245 3.163 0.002
d_agree_1 ~ frequ 0.031 -0.044 0.106 0.078 0.804 0.422
frequ ~~ frequ 0.478 0.319 0.637 1.000 5.908 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (ideal-self) is not significantly different from zero, b = 0.031, p = 0.422.

6.7.2.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4999.735 5098.98 1 0 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.741 NA NA
d_consc_1 ~1 0.026 -0.020 0.072 0.081 1.097 0.273
consc_t1 ~1 4.339 4.279 4.400 9.858 141.190 0.000
d_consc_1 ~~ d_consc_1 0.098 0.057 0.139 0.983 4.650 0.000
consc_t1 ~~ d_consc_1 -0.057 -0.085 -0.028 -0.412 -3.886 0.000
consc_t1 ~ goals -0.020 -0.097 0.057 -0.033 -0.504 0.615
d_consc_1 ~ goals -0.056 -0.127 0.014 -0.132 -1.563 0.118
goals ~~ goals 0.546 0.402 0.689 1.000 7.460 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal-self) is not significantly different from zero, b = -0.056, p = 0.118.

6.7.2.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4584.839 4684.084 0.992 0.031 0.029
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.740 NA NA
d_consc_1 ~1 0.027 -0.019 0.073 0.085 1.156 0.248
consc_t1 ~1 4.339 4.279 4.400 9.838 141.177 0.000
d_consc_1 ~~ d_consc_1 0.098 0.057 0.139 0.983 4.667 0.000
consc_t1 ~~ d_consc_1 -0.059 -0.087 -0.030 -0.431 -4.059 0.000
consc_t1 ~ frequ 0.095 -0.008 0.198 0.148 1.801 0.072
d_consc_1 ~ frequ 0.060 -0.014 0.134 0.131 1.595 0.111
frequ ~~ frequ 0.474 0.316 0.632 1.000 5.879 0.000

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score (ideal-self) is not significantly different from zero, b = 0.06, p = 0.111.

6.7.2.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5244.678 5343.923 0.99 0.034 0.045
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA
d_neuro_1 ~1 -0.007 -0.062 0.049 -0.019 -0.231 0.817
neuro_t1 ~1 1.751 1.685 1.818 3.280 51.766 0.000
d_neuro_1 ~~ d_neuro_1 0.122 0.063 0.181 0.999 4.048 0.000
neuro_t1 ~~ d_neuro_1 -0.078 -0.125 -0.031 -0.419 -3.240 0.001
neuro_t1 ~ goals 0.051 -0.050 0.152 0.064 0.995 0.320
d_neuro_1 ~ goals -0.014 -0.100 0.071 -0.027 -0.330 0.741
goals ~~ goals 0.448 0.298 0.598 1.000 5.852 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal-self) is not significantly different from zero, b = -0.014, p = 0.741.

6.7.2.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4801.645 4900.89 0.997 0.019 0.036
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.065 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.698 NA NA
d_neuro_1 ~1 -0.006 -0.062 0.050 -0.018 -0.227 0.821
neuro_t1 ~1 1.751 1.685 1.818 3.263 51.737 0.000
d_neuro_1 ~~ d_neuro_1 0.123 0.064 0.183 0.997 4.060 0.000
neuro_t1 ~~ d_neuro_1 -0.077 -0.123 -0.031 -0.416 -3.268 0.001
neuro_t1 ~ frequ -0.161 -0.281 -0.042 -0.209 -2.644 0.008
d_neuro_1 ~ frequ 0.029 -0.070 0.127 0.057 0.570 0.569
frequ ~~ frequ 0.482 0.323 0.641 1.000 5.940 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.569.

6.7.2.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5298.605 5397.85 0.989 0.037 0.033
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.048 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.730 NA NA
d_openn_1 ~1 0.014 -0.018 0.047 0.068 0.876 0.381
openn_t1 ~1 3.907 3.848 3.966 12.686 130.383 0.000
d_openn_1 ~~ d_openn_1 0.046 0.020 0.072 0.995 3.427 0.001
openn_t1 ~~ d_openn_1 -0.025 -0.042 -0.009 -0.416 -3.024 0.002
openn_t1 ~ goals -0.193 -0.272 -0.115 -0.370 -4.840 0.000
d_openn_1 ~ goals 0.027 -0.029 0.082 0.073 0.946 0.344
goals ~~ goals 0.347 0.222 0.471 1.000 5.457 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal-self) is not significantly different from zero, b = 0.027, p = 0.344.

6.7.2.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5076.784 5176.029 0.991 0.03 0.038
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.047 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.731 NA NA
d_openn_1 ~1 0.015 -0.018 0.048 0.069 0.901 0.368
openn_t1 ~1 3.907 3.848 3.966 12.636 130.274 0.000
d_openn_1 ~~ d_openn_1 0.047 0.020 0.073 0.999 3.444 0.001
openn_t1 ~~ d_openn_1 -0.028 -0.046 -0.009 -0.421 -2.975 0.003
openn_t1 ~ frequ 0.063 -0.003 0.129 0.142 1.878 0.060
d_openn_1 ~ frequ 0.010 -0.044 0.064 0.032 0.362 0.717
frequ ~~ frequ 0.481 0.323 0.638 1.000 5.968 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal-self) is not significantly different from zero, b = 0.01, p = 0.717.

6.7.3 Big Five traits (ideal self - follow-up at T3)

6.7.3.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4899.195 4994.068 1 0 0.035
# parameters of interest
params_lcs_extra_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.033 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.539 NA NA
d_extra_1 ~1 -0.007 -0.053 0.039 -0.032 -0.292 0.770
extra_t2 ~1 3.650 3.577 3.724 8.950 97.362 0.000
d_extra_1 ~~ d_extra_1 0.045 0.013 0.076 0.983 2.791 0.005
extra_t2 ~~ d_extra_1 -0.028 -0.057 0.000 -0.328 -1.940 0.052
extra_t2 ~ goals 0.020 -0.099 0.139 0.031 0.326 0.744
d_extra_1 ~ goals 0.044 -0.059 0.147 0.132 0.836 0.403
goals ~~ goals 0.407 0.179 0.634 1.000 3.508 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.044, p = 0.403.

6.7.3.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4690.649 4785.522 0.994 0.023 0.039
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.030 NA NA
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.542 NA NA
d_extra_1 ~1 -0.007 -0.053 0.038 -0.035 -0.321 0.749
extra_t2 ~1 3.650 3.577 3.724 9.117 97.559 0.000
d_extra_1 ~~ d_extra_1 0.044 0.013 0.075 0.993 2.819 0.005
extra_t2 ~~ d_extra_1 -0.025 -0.051 0.002 -0.308 -1.813 0.070
extra_t2 ~ frequ 0.182 0.080 0.283 0.314 3.518 0.000
d_extra_1 ~ frequ -0.025 -0.099 0.048 -0.083 -0.675 0.500
frequ ~~ frequ 0.479 0.322 0.635 1.000 5.999 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.025, p = 0.5.

6.7.3.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4470.297 4565.171 0.997 0.022 0.037
# parameters of interest
params_lcs_agree_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.480 NA NA
d_agree_1 ~1 -0.001 -0.042 0.040 -0.005 -0.058 0.954
agree_t2 ~1 3.814 3.736 3.892 8.043 96.133 0.000
d_agree_1 ~~ d_agree_1 0.049 0.015 0.083 0.989 2.808 0.005
agree_t2 ~~ d_agree_1 -0.028 -0.052 -0.005 -0.274 -2.359 0.018
agree_t2 ~ goals -0.125 -0.229 -0.020 -0.176 -2.337 0.019
d_agree_1 ~ goals 0.035 -0.033 0.103 0.104 0.998 0.318
goals ~~ goals 0.445 0.276 0.614 1.000 5.155 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.035, p = 0.318.

6.7.3.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4457.619 4552.492 0.995 0.027 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.481 NA NA
d_agree_1 ~1 -0.002 -0.042 0.039 -0.007 -0.074 0.941
agree_t2 ~1 3.814 3.736 3.892 8.124 96.192 0.000
d_agree_1 ~~ d_agree_1 0.046 0.014 0.078 0.954 2.791 0.005
agree_t2 ~~ d_agree_1 -0.023 -0.046 0.000 -0.241 -2.002 0.045
agree_t2 ~ frequ 0.195 0.100 0.290 0.287 4.018 0.000
d_agree_1 ~ frequ -0.069 -0.136 -0.001 -0.215 -1.993 0.046
frequ ~~ frequ 0.477 0.320 0.635 1.000 5.933 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.069, p = 0.046.

6.7.3.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4117.041 4211.914 0.978 0.056 0.038
# parameters of interest
params_lcs_consc_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.942 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.476 NA NA
d_consc_1 ~1 -0.014 -0.056 0.029 -0.059 -0.629 0.529
consc_t2 ~1 4.365 4.297 4.433 9.629 126.254 0.000
d_consc_1 ~~ d_consc_1 0.052 0.020 0.085 0.999 3.187 0.001
consc_t2 ~~ d_consc_1 -0.013 -0.039 0.013 -0.125 -0.961 0.337
consc_t2 ~ goals -0.081 -0.166 0.005 -0.131 -1.850 0.064
d_consc_1 ~ goals 0.008 -0.062 0.078 0.025 0.220 0.826
goals ~~ goals 0.541 0.385 0.697 1.000 6.797 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.008, p = 0.826.

6.7.3.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4082.852 4177.726 0.973 0.062 0.039
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.940 NA NA
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.474 NA NA
d_consc_1 ~1 -0.015 -0.057 0.028 -0.064 -0.674 0.500
consc_t2 ~1 4.365 4.297 4.433 9.605 126.263 0.000
d_consc_1 ~~ d_consc_1 0.049 0.018 0.080 0.939 3.113 0.002
consc_t2 ~~ d_consc_1 -0.006 -0.033 0.021 -0.062 -0.441 0.659
consc_t2 ~ frequ 0.169 0.062 0.275 0.255 3.110 0.002
d_consc_1 ~ frequ -0.082 -0.154 -0.011 -0.247 -2.256 0.024
frequ ~~ frequ 0.473 0.316 0.631 1.000 5.897 0.000

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.082, p = 0.024.

6.7.3.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4443.133 4538.007 0.993 0.028 0.034
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.992 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 0.023 -0.027 0.073 0.097 0.896 0.370
neuro_t2 ~1 1.747 1.676 1.819 3.531 48.088 0.000
d_neuro_1 ~~ d_neuro_1 0.056 0.011 0.101 1.000 2.452 0.014
neuro_t2 ~~ d_neuro_1 -0.026 -0.059 0.006 -0.224 -1.588 0.112
neuro_t2 ~ goals 0.039 -0.060 0.138 0.050 0.769 0.442
d_neuro_1 ~ goals 0.005 -0.075 0.085 0.014 0.128 0.898
goals ~~ goals 0.408 0.246 0.570 1.000 4.932 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.005, p = 0.898.

6.7.3.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4388.419 4483.292 0.992 0.03 0.032
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.991 NA NA
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA
d_neuro_1 ~1 0.024 -0.027 0.075 0.101 0.926 0.354
neuro_t2 ~1 1.747 1.676 1.819 3.514 48.024 0.000
d_neuro_1 ~~ d_neuro_1 0.053 0.008 0.098 0.926 2.307 0.021
neuro_t2 ~~ d_neuro_1 -0.021 -0.053 0.011 -0.184 -1.265 0.206
neuro_t2 ~ frequ -0.125 -0.229 -0.022 -0.174 -2.377 0.017
d_neuro_1 ~ frequ 0.094 0.012 0.176 0.272 2.237 0.025
frequ ~~ frequ 0.475 0.318 0.632 1.000 5.941 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.094, p = 0.025.

6.7.3.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4531.988 4626.861 1 0 0.027
# parameters of interest
params_lcs_openn_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.948 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.565 NA NA
d_openn_1 ~1 0.005 -0.025 0.034 0.030 0.316 0.752
openn_t2 ~1 3.856 3.795 3.918 14.493 122.448 0.000
d_openn_1 ~~ d_openn_1 0.025 0.007 0.043 1.000 2.786 0.005
openn_t2 ~~ d_openn_1 -0.009 -0.020 0.003 -0.215 -1.401 0.161
openn_t2 ~ goals -0.155 -0.222 -0.087 -0.343 -4.497 0.000
d_openn_1 ~ goals 0.001 -0.049 0.051 0.004 0.044 0.965
goals ~~ goals 0.348 0.211 0.486 1.000 4.971 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.001, p = 0.965.

6.7.3.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4655.339 4750.212 1 0.005 0.035
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.949 NA NA
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.569 NA NA
d_openn_1 ~1 0.005 -0.025 0.035 0.030 0.313 0.755
openn_t2 ~1 3.856 3.795 3.918 14.314 122.309 0.000
d_openn_1 ~~ d_openn_1 0.026 0.008 0.044 1.000 2.794 0.005
openn_t2 ~~ d_openn_1 -0.009 -0.022 0.004 -0.214 -1.367 0.172
openn_t2 ~ frequ 0.070 0.013 0.127 0.179 2.389 0.017
d_openn_1 ~ frequ 0.003 -0.042 0.049 0.014 0.143 0.886
frequ ~~ frequ 0.480 0.323 0.638 1.000 5.981 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.003, p = 0.886.

6.7.4 Big Five traits (current self)

6.7.4.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6203.425 6302.67 0.974 0.062 0.043
# parameters of interest
params_lcs_extra_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.027 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.451 NA NA
d_extra_1 ~1 0.092 0.047 0.137 0.345 4.018 0.000
extra_t1 ~1 3.030 2.942 3.118 4.972 67.579 0.000
d_extra_1 ~~ d_extra_1 0.070 0.035 0.106 0.981 3.915 0.000
extra_t1 ~~ d_extra_1 -0.031 -0.057 -0.006 -0.248 -2.430 0.015
extra_t1 ~ goals -0.528 -0.710 -0.347 -0.620 -5.703 0.000
d_extra_1 ~ goals 0.052 -0.035 0.139 0.139 1.166 0.244
goals ~~ goals 0.512 0.327 0.697 1.000 5.431 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (current-self) is not significantly different from zero, b = 0.052, p = 0.244.

6.7.4.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5677.102 5776.347 0.994 0.03 0.034
# parameters of interest
params_lcs_extra_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.026 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.450 NA NA
d_extra_1 ~1 0.089 0.045 0.133 0.342 3.955 0.000
extra_t1 ~1 3.032 2.944 3.119 5.096 67.775 0.000
d_extra_1 ~~ d_extra_1 0.067 0.034 0.101 0.988 3.931 0.000
extra_t1 ~~ d_extra_1 -0.044 -0.072 -0.016 -0.287 -3.098 0.002
extra_t1 ~ frequ 0.067 -0.073 0.208 0.078 0.938 0.348
d_extra_1 ~ frequ 0.041 -0.038 0.119 0.108 1.014 0.310
frequ ~~ frequ 0.477 0.318 0.635 1.000 5.893 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (current-self) is not significantly different from zero, b = 0.041, p = 0.31.

6.7.4.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5398.923 5498.168 0.988 0.037 0.029
# parameters of interest
params_lcs_agree_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.967 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.524 NA NA
d_agree_1 ~1 0.024 -0.011 0.059 0.120 1.357 0.175
agree_t1 ~1 3.462 3.398 3.525 9.309 107.614 0.000
d_agree_1 ~~ d_agree_1 0.039 0.012 0.067 0.973 2.792 0.005
agree_t1 ~~ d_agree_1 -0.019 -0.038 0.000 -0.272 -2.011 0.044
agree_t1 ~ goals -0.164 -0.253 -0.074 -0.298 -3.580 0.000
d_agree_1 ~ goals -0.048 -0.115 0.018 -0.163 -1.425 0.154
goals ~~ goals 0.459 0.322 0.595 1.000 6.591 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (current-self) is not significantly different from zero, b = -0.048, p = 0.154.

6.7.4.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5020.378 5119.623 0.995 0.024 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.963 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.522 NA NA
d_agree_1 ~1 0.027 -0.009 0.062 0.129 1.463 0.144
agree_t1 ~1 3.461 3.398 3.524 9.130 107.741 0.000
d_agree_1 ~~ d_agree_1 0.042 0.009 0.074 0.988 2.523 0.012
agree_t1 ~~ d_agree_1 -0.016 -0.034 0.002 -0.211 -1.752 0.080
agree_t1 ~ frequ 0.050 -0.038 0.137 0.090 1.112 0.266
d_agree_1 ~ frequ 0.032 -0.032 0.096 0.109 0.992 0.321
frequ ~~ frequ 0.476 0.319 0.633 1.000 5.949 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (current-self) is not significantly different from zero, b = 0.032, p = 0.321.

6.7.4.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5561.201 5660.446 0.98 0.064 0.028
# parameters of interest
params_lcs_consc_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.983 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA
d_consc_1 ~1 0.074 0.024 0.124 0.212 2.878 0.004
consc_t1 ~1 3.380 3.299 3.461 5.053 81.588 0.000
d_consc_1 ~~ d_consc_1 0.120 0.080 0.160 0.992 5.874 0.000
consc_t1 ~~ d_consc_1 -0.039 -0.069 -0.009 -0.220 -2.543 0.011
consc_t1 ~ goals -0.559 -0.679 -0.439 -0.644 -9.162 0.000
d_consc_1 ~ goals 0.042 -0.030 0.113 0.092 1.143 0.253
goals ~~ goals 0.594 0.460 0.727 1.000 8.696 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.042, p = 0.253.

6.7.4.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5266.96 5366.205 0.998 0.018 0.03
# parameters of interest
params_lcs_consc_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.984 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA
d_consc_1 ~1 0.074 0.024 0.125 0.213 2.886 0.004
consc_t1 ~1 3.380 3.299 3.461 5.054 81.596 0.000
d_consc_1 ~~ d_consc_1 0.121 0.079 0.162 0.997 5.702 0.000
consc_t1 ~~ d_consc_1 -0.055 -0.087 -0.023 -0.239 -3.356 0.001
consc_t1 ~ frequ 0.136 -0.017 0.290 0.141 1.743 0.081
d_consc_1 ~ frequ 0.029 -0.051 0.109 0.057 0.709 0.478
frequ ~~ frequ 0.476 0.317 0.635 1.000 5.879 0.000

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score (current-self) is not significantly different from zero, b = 0.029, p = 0.478.

6.7.4.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5836.258 5935.503 0.992 0.042 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.462 NA NA
d_neuro_1 ~1 -0.176 -0.231 -0.122 -0.474 -6.338 0.000
neuro_t1 ~1 3.250 3.157 3.342 4.077 68.940 0.000
d_neuro_1 ~~ d_neuro_1 0.138 0.093 0.184 1.000 5.905 0.000
neuro_t1 ~~ d_neuro_1 -0.060 -0.101 -0.020 -0.237 -2.921 0.003
neuro_t1 ~ goals 0.597 0.439 0.756 0.517 7.384 0.000
d_neuro_1 ~ goals -0.010 -0.097 0.077 -0.018 -0.222 0.824
goals ~~ goals 0.476 0.346 0.606 1.000 7.172 0.000

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (current-self) is not significantly different from zero, b = -0.01, p = 0.824.

6.7.4.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5473.66 5572.905 1 0 0.04
# parameters of interest
params_lcs_neuro_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.463 NA NA
d_neuro_1 ~1 -0.176 -0.231 -0.121 -0.472 -6.296 0.000
neuro_t1 ~1 3.250 3.158 3.342 4.066 68.947 0.000
d_neuro_1 ~~ d_neuro_1 0.133 0.087 0.179 0.951 5.663 0.000
neuro_t1 ~~ d_neuro_1 -0.057 -0.099 -0.015 -0.197 -2.676 0.007
neuro_t1 ~ frequ 0.114 -0.038 0.267 0.100 1.466 0.143
d_neuro_1 ~ frequ -0.118 -0.215 -0.020 -0.221 -2.369 0.018
frequ ~~ frequ 0.489 0.329 0.649 1.000 5.993 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (current-self) is not significantly different from zero (at p < .001), b = -0.118, p = 0.018.

6.7.4.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5353.863 5453.108 0.993 0.037 0.032
# parameters of interest
params_lcs_openn_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.408 NA NA
d_openn_1 ~1 0.075 0.032 0.118 0.317 3.447 0.001
openn_t1 ~1 3.565 3.490 3.640 6.028 93.319 0.000
d_openn_1 ~~ d_openn_1 0.055 0.025 0.085 0.983 3.549 0.000
openn_t1 ~~ d_openn_1 -0.026 -0.050 -0.001 -0.217 -2.050 0.040
openn_t1 ~ goals -0.521 -0.660 -0.382 -0.524 -7.339 0.000
d_openn_1 ~ goals 0.052 -0.028 0.131 0.130 1.278 0.201
goals ~~ goals 0.353 0.229 0.478 1.000 5.579 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (current-self) is not significantly different from zero, b = 0.052, p = 0.201.

6.7.4.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5166.041 5265.286 0.995 0.029 0.035
# parameters of interest
params_lcs_openn_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.407 NA NA
d_openn_1 ~1 0.076 0.033 0.119 0.317 3.454 0.001
openn_t1 ~1 3.564 3.490 3.639 5.955 93.281 0.000
d_openn_1 ~~ d_openn_1 0.055 0.026 0.085 0.972 3.648 0.000
openn_t1 ~~ d_openn_1 -0.040 -0.066 -0.014 -0.287 -3.041 0.002
openn_t1 ~ frequ 0.151 0.036 0.265 0.173 2.576 0.010
d_openn_1 ~ frequ 0.059 -0.027 0.144 0.168 1.344 0.179
frequ ~~ frequ 0.470 0.313 0.628 1.000 5.851 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (current-self) is not significantly different from zero, b = 0.059, p = 0.179.

6.7.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

facet_template_mod_goal_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal self (from T2 to T3)
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal self ratings)

facet_template_mod_frequ_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal self
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), facet_model_fit))
} 

6.7.6 Big Five facets (ideal self)

6.7.6.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7858.806 7946.6 0.933 0.048 0.055
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.894 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.483 NA NA
d_socia_1 ~1 -0.062 -0.121 -0.002 -0.323 -2.023 0.043
socia_t1 ~1 4.226 4.146 4.305 11.965 103.948 0.000
d_socia_1 ~~ d_socia_1 0.032 -0.024 0.089 0.884 1.115 0.265
socia_t1 ~~ d_socia_1 0.001 -0.030 0.033 0.020 0.077 0.939
d_socia_1 ~ sa07_01_t1 -0.065 -0.125 -0.005 -0.341 -2.120 0.034
sa07_01_t1 ~~ sa07_01_t1 0.997 0.892 1.102 1.000 18.622 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal-self) is not significantly different from zero (at p < .001), b = -0.065, p = 0.034.

6.7.6.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9080.175 9194.688 0.938 0.049 0.057
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.895 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.488 NA NA
d_socia_1 ~1 -0.062 -0.122 -0.001 -0.320 -1.982 0.048
socia_t1 ~1 4.226 4.145 4.307 11.988 102.547 0.000
d_socia_1 ~~ d_socia_1 0.037 -0.021 0.095 0.993 1.242 0.214
socia_t1 ~~ d_socia_1 -0.002 -0.033 0.030 -0.026 -0.108 0.914
socia_t1 ~ frequ 0.119 0.005 0.233 0.235 2.052 0.040
d_socia_1 ~ frequ -0.024 -0.123 0.076 -0.086 -0.469 0.639
frequ ~~ frequ 0.485 0.327 0.643 1.000 6.007 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal-self) is not significantly different from zero, b = -0.024, p = 0.639.

6.7.6.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7792.121 7879.914 1 0 0.04
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.420 NA NA
d_asser_1 ~1 -0.025 -0.074 0.023 -0.154 -1.024 0.306
asser_t1 ~1 4.134 4.044 4.224 11.495 89.930 0.000
d_asser_1 ~~ d_asser_1 0.026 -0.014 0.066 0.964 1.268 0.205
asser_t1 ~~ d_asser_1 -0.003 -0.032 0.026 -0.058 -0.225 0.822
d_asser_1 ~ sa07_02_t1 0.031 -0.020 0.082 0.189 1.197 0.231
sa07_02_t1 ~~ sa07_02_t1 0.997 0.898 1.096 1.000 19.717 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal-self) is not significantly different from zero, b = 0.031, p = 0.231.

6.7.6.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9005.413 9119.926 1 0 0.041
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.419 NA NA
d_asser_1 ~1 -0.026 -0.076 0.024 -0.155 -1.012 0.312
asser_t1 ~1 4.134 4.044 4.225 11.256 89.400 0.000
d_asser_1 ~~ d_asser_1 0.028 -0.014 0.070 0.998 1.300 0.194
asser_t1 ~~ d_asser_1 -0.001 -0.031 0.029 -0.021 -0.080 0.937
asser_t1 ~ frequ 0.157 0.047 0.266 0.297 2.812 0.005
d_asser_1 ~ frequ -0.011 -0.096 0.074 -0.046 -0.254 0.800
frequ ~~ frequ 0.486 0.330 0.641 1.000 6.127 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (ideal-self) is not significantly different from zero, b = -0.011, p = 0.8.

6.7.6.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7507.595 7595.389 0.92 0.049 0.056
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.001 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA
d_energ_1 ~1 -0.002 -0.033 0.028 -0.014 -0.145 0.885
energ_t1 ~1 3.779 3.662 3.895 17.997 63.551 0.000
d_energ_1 ~~ d_energ_1 0.026 -0.020 0.072 1.000 1.107 0.268
energ_t1 ~~ d_energ_1 -0.013 -0.039 0.013 -0.386 -0.987 0.324
d_energ_1 ~ sa07_03_t1 -0.002 -0.031 0.027 -0.010 -0.106 0.915
sa07_03_t1 ~~ sa07_03_t1 0.997 0.889 1.105 1.000 18.028 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal-self) is not significantly different from zero, b = -0.002, p = 0.915.

6.7.6.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8705.901 8820.415 0.943 0.046 0.056
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.014 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.763 NA NA
d_energ_1 ~1 0.000 -0.034 0.035 0.002 0.018 0.986
energ_t1 ~1 3.778 3.661 3.894 16.212 63.380 0.000
d_energ_1 ~~ d_energ_1 0.030 -0.009 0.070 0.991 1.524 0.128
energ_t1 ~~ d_energ_1 -0.017 -0.041 0.006 -0.453 -1.463 0.143
energ_t1 ~ frequ 0.111 0.022 0.200 0.327 2.457 0.014
d_energ_1 ~ frequ 0.024 -0.034 0.083 0.096 0.825 0.409
frequ ~~ frequ 0.469 0.312 0.626 1.000 5.855 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal-self) is not significantly different from zero, b = 0.024, p = 0.409.

6.7.6.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8103.431 8191.225 0.96 0.041 0.047
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.017 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.601 NA NA
d_compa_1 ~1 0.016 -0.064 0.097 0.046 0.401 0.689
compa_t1 ~1 4.291 4.197 4.385 7.147 89.606 0.000
d_compa_1 ~~ d_compa_1 0.126 0.017 0.234 0.999 2.265 0.024
compa_t1 ~~ d_compa_1 -0.068 -0.141 0.006 -0.325 -1.810 0.070
d_compa_1 ~ sa07_04_t1 0.010 -0.078 0.099 0.029 0.226 0.821
sa07_04_t1 ~~ sa07_04_t1 0.997 0.893 1.101 1.000 18.799 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal-self) is not significantly different from zero, b = 0.01, p = 0.821.

6.7.6.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9326.701 9441.214 0.975 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA
d_compa_1 ~1 0.020 -0.064 0.103 0.053 0.459 0.646
compa_t1 ~1 4.291 4.196 4.385 6.900 88.970 0.000
d_compa_1 ~~ d_compa_1 0.137 0.019 0.254 1.000 2.285 0.022
compa_t1 ~~ d_compa_1 -0.074 -0.155 0.006 -0.328 -1.814 0.070
compa_t1 ~ frequ 0.151 -0.016 0.318 0.168 1.773 0.076
d_compa_1 ~ frequ 0.000 -0.147 0.146 -0.001 -0.005 0.996
frequ ~~ frequ 0.480 0.322 0.639 1.000 5.935 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal-self) is not significantly different from zero, b = 0, p = 0.996.

6.7.6.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6287.373 6375.167 0.911 0.077 0.061
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.391 NA NA
d_respe_1 ~1 -0.001 -0.043 0.040 -0.009 -0.063 0.950
respe_t1 ~1 4.625 4.561 4.688 12.068 142.287 0.000
d_respe_1 ~~ d_respe_1 0.022 -0.006 0.051 0.999 1.558 0.119
respe_t1 ~~ d_respe_1 -0.011 -0.038 0.015 -0.200 -0.834 0.404
d_respe_1 ~ sa07_05_t1 -0.005 -0.052 0.042 -0.036 -0.228 0.820
sa07_05_t1 ~~ sa07_05_t1 0.997 0.842 1.152 1.000 12.613 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal-self) is not significantly different from zero, b = -0.005, p = 0.82.

6.7.6.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7498.089 7612.602 0.967 0.044 0.045
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.389 NA NA
d_respe_1 ~1 -0.001 -0.042 0.040 -0.006 -0.040 0.968
respe_t1 ~1 4.625 4.560 4.690 12.266 139.842 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.005 0.048 0.975 1.563 0.118
respe_t1 ~~ d_respe_1 -0.012 -0.038 0.013 -0.234 -0.945 0.344
respe_t1 ~ frequ 0.128 0.041 0.216 0.236 2.862 0.004
d_respe_1 ~ frequ 0.033 -0.036 0.103 0.157 0.939 0.348
frequ ~~ frequ 0.481 0.324 0.638 1.000 5.998 0.000

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score (ideal-self) is not significantly different from zero, b = 0.033, p = 0.348.

6.7.6.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7836.569 7924.363 0.965 0.039 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.594 NA NA
d_trust_1 ~1 0.014 -0.048 0.076 0.052 0.449 0.653
trust_t1 ~1 4.054 3.955 4.153 7.950 80.349 0.000
d_trust_1 ~~ d_trust_1 0.075 0.004 0.146 0.998 2.062 0.039
trust_t1 ~~ d_trust_1 -0.061 -0.106 -0.016 -0.440 -2.678 0.007
d_trust_1 ~ sa07_06_t1 0.013 -0.052 0.078 0.047 0.389 0.697
sa07_06_t1 ~~ sa07_06_t1 0.997 0.893 1.101 1.000 18.829 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal-self) is not significantly different from zero, b = 0.013, p = 0.697.

6.7.6.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9043.04 9157.553 0.967 0.039 0.048
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.604 NA NA
d_trust_1 ~1 0.015 -0.046 0.076 0.056 0.488 0.626
trust_t1 ~1 4.054 3.955 4.153 8.079 80.395 0.000
d_trust_1 ~~ d_trust_1 0.073 0.003 0.143 0.973 2.041 0.041
trust_t1 ~~ d_trust_1 -0.065 -0.109 -0.021 -0.490 -2.872 0.004
trust_t1 ~ frequ 0.142 0.005 0.280 0.197 2.032 0.042
d_trust_1 ~ frequ 0.065 -0.041 0.171 0.165 1.196 0.232
frequ ~~ frequ 0.481 0.323 0.640 1.000 5.954 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal-self) is not significantly different from zero (at p < .001), b = 0.065, p = 0.232.

6.7.6.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6764.729 6852.522 0.978 0.029 0.045
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.972 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.604 NA NA
d_organ_1 ~1 0.005 -0.052 0.062 0.019 0.176 0.861
organ_t1 ~1 4.246 4.143 4.349 9.999 81.046 0.000
d_organ_1 ~~ d_organ_1 0.069 0.009 0.129 0.988 2.258 0.024
organ_t1 ~~ d_organ_1 -0.030 -0.079 0.019 -0.269 -1.191 0.234
d_organ_1 ~ sa07_07_t1 -0.029 -0.089 0.030 -0.112 -0.967 0.334
sa07_07_t1 ~~ sa07_07_t1 0.997 0.910 1.084 1.000 22.344 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal-self) is not significantly different from zero, b = -0.029, p = 0.334.

6.7.6.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7978.169 8092.682 0.992 0.017 0.043
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.970 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.605 NA NA
d_organ_1 ~1 0.005 -0.051 0.061 0.019 0.177 0.860
organ_t1 ~1 4.246 4.143 4.349 10.120 81.057 0.000
d_organ_1 ~~ d_organ_1 0.068 0.008 0.129 1.000 2.209 0.027
organ_t1 ~~ d_organ_1 -0.029 -0.080 0.022 -0.269 -1.119 0.263
organ_t1 ~ frequ 0.124 0.002 0.246 0.205 1.986 0.047
d_organ_1 ~ frequ 0.003 -0.097 0.104 0.009 0.067 0.947
frequ ~~ frequ 0.481 0.323 0.638 1.000 5.982 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (ideal-self) is not significantly different from zero, b = 0.003, p = 0.947.

6.7.6.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6161.35 6249.144 0.909 0.069 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.046 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.676 NA NA
d_produ_1 ~1 0.028 -0.019 0.075 0.117 1.172 0.241
produ_t1 ~1 4.415 4.337 4.493 11.949 111.087 0.000
d_produ_1 ~~ d_produ_1 0.056 0.009 0.103 0.979 2.314 0.021
produ_t1 ~~ d_produ_1 -0.034 -0.071 0.002 -0.396 -1.851 0.064
d_produ_1 ~ sa07_08_t1 -0.035 -0.081 0.012 -0.146 -1.474 0.141
sa07_08_t1 ~~ sa07_08_t1 0.997 0.897 1.097 1.000 19.477 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal-self) is not significantly different from zero, b = -0.035, p = 0.141.

6.7.6.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7371.889 7486.402 0.922 0.064 0.064
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.042 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA
d_produ_1 ~1 0.029 -0.017 0.076 0.123 1.236 0.216
produ_t1 ~1 4.415 4.337 4.493 11.928 111.134 0.000
d_produ_1 ~~ d_produ_1 0.055 0.008 0.101 0.952 2.300 0.021
produ_t1 ~~ d_produ_1 -0.036 -0.073 0.001 -0.423 -1.928 0.054
produ_t1 ~ frequ 0.063 -0.027 0.153 0.117 1.377 0.168
d_produ_1 ~ frequ 0.077 -0.001 0.154 0.219 1.934 0.053
frequ ~~ frequ 0.470 0.313 0.626 1.000 5.875 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (ideal-self) is not significantly different from zero (at p < .001), b = 0.077, p = 0.053.

6.7.6.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6981.709 7069.502 0.959 0.047 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.623 NA NA
d_respo_1 ~1 0.017 -0.036 0.070 0.063 0.622 0.534
respo_t1 ~1 4.239 4.135 4.343 10.920 79.793 0.000
d_respo_1 ~~ d_respo_1 0.069 0.014 0.125 0.987 2.449 0.014
respo_t1 ~~ d_respo_1 -0.021 -0.056 0.014 -0.205 -1.179 0.238
d_respo_1 ~ sa07_09_t1 -0.030 -0.083 0.023 -0.113 -1.098 0.272
sa07_09_t1 ~~ sa07_09_t1 0.997 0.896 1.098 1.000 19.415 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal-self) is not significantly different from zero, b = -0.03, p = 0.272.

6.7.6.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8195.653 8310.167 0.972 0.038 0.049
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.626 NA NA
d_respo_1 ~1 0.018 -0.035 0.071 0.066 0.656 0.512
respo_t1 ~1 4.239 4.135 4.343 10.726 80.005 0.000
d_respo_1 ~~ d_respo_1 0.071 0.015 0.127 0.967 2.484 0.013
respo_t1 ~~ d_respo_1 -0.024 -0.060 0.012 -0.230 -1.302 0.193
respo_t1 ~ frequ 0.089 -0.022 0.201 0.156 1.568 0.117
d_respo_1 ~ frequ 0.071 -0.015 0.157 0.181 1.622 0.105
frequ ~~ frequ 0.477 0.319 0.635 1.000 5.904 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal-self) is not significantly different from zero (at p < .001), b = 0.071, p = 0.105.

6.7.6.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7747.267 7835.06 0.922 0.05 0.059
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA
d_anxie_1 ~1 -0.019 -0.077 0.039 -0.076 -0.652 0.515
anxie_t1 ~1 1.470 1.390 1.549 3.596 36.300 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.004 0.132 1.000 1.850 0.064
anxie_t1 ~~ d_anxie_1 -0.056 -0.118 0.007 -0.538 -1.746 0.081
d_anxie_1 ~ sa07_10_t1 0.004 -0.048 0.055 0.014 0.139 0.890
sa07_10_t1 ~~ sa07_10_t1 0.997 0.906 1.088 1.000 21.431 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.004, p = 0.89.

6.7.6.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8960.427 9074.94 0.969 0.034 0.05
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.183 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.726 NA NA
d_anxie_1 ~1 -0.020 -0.080 0.040 -0.079 -0.662 0.508
anxie_t1 ~1 1.470 1.391 1.550 3.498 36.164 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.005 0.132 0.956 1.812 0.070
anxie_t1 ~~ d_anxie_1 -0.054 -0.115 0.008 -0.518 -1.705 0.088
anxie_t1 ~ frequ -0.128 -0.245 -0.011 -0.213 -2.144 0.032
d_anxie_1 ~ frequ 0.077 -0.024 0.179 0.210 1.496 0.135
frequ ~~ frequ 0.489 0.329 0.648 1.000 6.014 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal-self) is not significantly different from zero, b = 0.077, p = 0.135.

6.7.6.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6173.072 6260.866 0.94 0.055 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 -0.006 -0.058 0.045 -0.024 -0.237 0.813
depre_t1 ~1 1.557 1.481 1.632 3.557 40.495 0.000
d_depre_1 ~~ d_depre_1 0.070 0.012 0.128 0.999 2.357 0.018
depre_t1 ~~ d_depre_1 -0.059 -0.108 -0.011 -0.512 -2.394 0.017
d_depre_1 ~ sa07_11_t1 0.006 -0.043 0.056 0.024 0.248 0.804
sa07_11_t1 ~~ sa07_11_t1 0.997 0.908 1.086 1.000 21.989 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.804.

6.7.6.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7387.206 7501.72 0.944 0.053 0.057
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.156 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 -0.006 -0.059 0.047 -0.022 -0.226 0.821
depre_t1 ~1 1.557 1.481 1.632 3.482 40.408 0.000
d_depre_1 ~~ d_depre_1 0.073 0.012 0.133 0.993 2.360 0.018
depre_t1 ~~ d_depre_1 -0.060 -0.108 -0.011 -0.505 -2.418 0.016
depre_t1 ~ frequ -0.116 -0.236 0.004 -0.180 -1.895 0.058
d_depre_1 ~ frequ 0.033 -0.057 0.122 0.084 0.719 0.472
frequ ~~ frequ 0.479 0.321 0.638 1.000 5.924 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal-self) is not significantly different from zero, b = 0.033, p = 0.472.

6.7.6.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7220.041 7307.834 0.954 0.042 0.051
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.020 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.570 NA NA
d_volat_1 ~1 -0.010 -0.072 0.052 -0.038 -0.308 0.758
volat_t1 ~1 1.647 1.567 1.726 3.615 40.652 0.000
d_volat_1 ~~ d_volat_1 0.062 -0.002 0.126 0.953 1.897 0.058
volat_t1 ~~ d_volat_1 -0.031 -0.076 0.015 -0.279 -1.330 0.184
d_volat_1 ~ sa07_12_t1 -0.055 -0.113 0.003 -0.216 -1.855 0.064
sa07_12_t1 ~~ sa07_12_t1 0.997 0.893 1.101 1.000 18.847 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal-self) is not significantly different from zero, b = -0.055, p = 0.064.

6.7.6.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8442.839 8557.353 0.96 0.041 0.051
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.013 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.565 NA NA
d_volat_1 ~1 -0.009 -0.072 0.055 -0.034 -0.269 0.788
volat_t1 ~1 1.646 1.566 1.726 3.576 40.293 0.000
d_volat_1 ~~ d_volat_1 0.065 -0.001 0.132 0.992 1.926 0.054
volat_t1 ~~ d_volat_1 -0.038 -0.087 0.012 -0.324 -1.479 0.139
volat_t1 ~ frequ -0.117 -0.249 0.014 -0.176 -1.747 0.081
d_volat_1 ~ frequ -0.033 -0.141 0.075 -0.090 -0.606 0.545
frequ ~~ frequ 0.480 0.322 0.637 1.000 5.956 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal-self) is not significantly different from zero, b = -0.033, p = 0.545.

6.7.6.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7620.132 7707.926 0.972 0.035 0.05
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.547 NA NA
d_curio_1 ~1 0.017 -0.037 0.071 0.081 0.625 0.532
curio_t1 ~1 4.458 4.384 4.531 10.649 118.797 0.000
d_curio_1 ~~ d_curio_1 0.044 -0.007 0.094 0.981 1.702 0.089
curio_t1 ~~ d_curio_1 -0.032 -0.071 0.006 -0.382 -1.633 0.103
d_curio_1 ~ sa07_13_t1 0.029 -0.018 0.076 0.138 1.222 0.222
sa07_13_t1 ~~ sa07_13_t1 0.997 0.885 1.109 1.000 17.438 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.029, p = 0.222.

6.7.6.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8853.449 8967.962 0.983 0.027 0.049
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.543 NA NA
d_curio_1 ~1 0.017 -0.036 0.070 0.081 0.613 0.540
curio_t1 ~1 4.458 4.383 4.533 10.853 116.407 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.007 0.091 0.992 1.692 0.091
curio_t1 ~~ d_curio_1 -0.034 -0.073 0.005 -0.404 -1.689 0.091
curio_t1 ~ frequ 0.020 -0.088 0.129 0.035 0.369 0.712
d_curio_1 ~ frequ 0.027 -0.054 0.107 0.090 0.643 0.520
frequ ~~ frequ 0.485 0.327 0.643 1.000 6.009 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal-self) is not significantly different from zero, b = 0.027, p = 0.52.

6.7.6.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7644.521 7732.315 0.97 0.044 0.044
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.972 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA
d_aesth_1 ~1 0.020 -0.013 0.054 0.119 1.175 0.240
aesth_t1 ~1 3.097 2.962 3.232 11.421 45.050 0.000
d_aesth_1 ~~ d_aesth_1 0.029 -0.001 0.059 0.999 1.875 0.061
aesth_t1 ~~ d_aesth_1 -0.012 -0.029 0.006 -0.266 -1.323 0.186
d_aesth_1 ~ sa07_14_t1 0.006 -0.020 0.033 0.037 0.459 0.646
sa07_14_t1 ~~ sa07_14_t1 0.997 0.908 1.086 1.000 21.957 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.006, p = 0.646.

6.7.6.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8864.521 8979.034 0.979 0.035 0.047
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.969 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA
d_aesth_1 ~1 0.019 -0.014 0.052 0.117 1.145 0.252
aesth_t1 ~1 3.097 2.962 3.233 11.970 44.854 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.003 0.055 0.992 1.788 0.074
aesth_t1 ~~ d_aesth_1 -0.012 -0.030 0.006 -0.298 -1.310 0.190
aesth_t1 ~ frequ 0.097 0.026 0.169 0.260 2.663 0.008
d_aesth_1 ~ frequ 0.021 -0.037 0.079 0.091 0.723 0.470
frequ ~~ frequ 0.477 0.319 0.634 1.000 5.940 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal-self) is not significantly different from zero, b = 0.021, p = 0.47.

6.7.6.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7191.839 7279.632 0.908 0.07 0.06
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.047 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.654 NA NA
d_imagi_1 ~1 -0.012 -0.075 0.052 -0.035 -0.361 0.718
imagi_t1 ~1 4.544 4.468 4.621 8.566 116.358 0.000
d_imagi_1 ~~ d_imagi_1 0.110 0.029 0.190 0.997 2.662 0.008
imagi_t1 ~~ d_imagi_1 -0.069 -0.129 -0.008 -0.397 -2.231 0.026
d_imagi_1 ~ sa07_15_t1 -0.019 -0.082 0.045 -0.056 -0.574 0.566
sa07_15_t1 ~~ sa07_15_t1 0.997 0.913 1.081 1.000 23.329 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal-self) is not significantly different from zero, b = -0.019, p = 0.566.

6.7.6.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8415.335 8529.848 0.966 0.041 0.048
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.042 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.651 NA NA
d_imagi_1 ~1 -0.012 -0.074 0.051 -0.035 -0.362 0.717
imagi_t1 ~1 4.545 4.468 4.622 8.635 115.719 0.000
d_imagi_1 ~~ d_imagi_1 0.108 0.028 0.188 0.996 2.635 0.008
imagi_t1 ~~ d_imagi_1 -0.063 -0.125 -0.001 -0.370 -1.991 0.046
imagi_t1 ~ frequ 0.132 0.026 0.237 0.173 2.439 0.015
d_imagi_1 ~ frequ -0.031 -0.141 0.079 -0.066 -0.554 0.580
frequ ~~ frequ 0.480 0.323 0.638 1.000 5.977 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal-self) is not significantly different from zero, b = -0.031, p = 0.58.

6.7.7 Big Five facets (ideal self - follow-up T3)

6.7.7.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6702.184 6786.111 0.953 0.048 0.058
# parameters of interest
params_lcs_socia_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.051 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.624 NA NA
d_socia_1 ~1 0.006 -0.055 0.066 0.024 0.183 0.855
socia_t2 ~1 4.158 4.064 4.252 10.565 86.768 0.000
d_socia_1 ~~ d_socia_1 0.054 0.005 0.103 0.985 2.147 0.032
socia_t2 ~~ d_socia_1 -0.034 -0.073 0.004 -0.377 -1.749 0.080
d_socia_1 ~ sa07_01_t1 0.028 -0.023 0.079 0.121 1.061 0.289
sa07_01_t1 ~~ sa07_01_t1 1.051 0.935 1.166 1.000 17.799 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = 0.028, p = 0.289.

6.7.7.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8051.682 8161.151 0.94 0.056 0.059
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.049 NA NA
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.619 NA NA
d_socia_1 ~1 0.004 -0.059 0.066 0.016 0.122 0.903
socia_t2 ~1 4.159 4.065 4.253 10.403 86.649 0.000
d_socia_1 ~~ d_socia_1 0.056 0.005 0.106 1.000 2.148 0.032
socia_t2 ~~ d_socia_1 -0.035 -0.075 0.005 -0.375 -1.706 0.088
socia_t2 ~ frequ 0.086 -0.031 0.203 0.149 1.433 0.152
d_socia_1 ~ frequ -0.004 -0.103 0.096 -0.011 -0.074 0.941
frequ ~~ frequ 0.486 0.328 0.643 1.000 6.036 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.004, p = 0.941.

6.7.7.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6798.237 6882.164 0.987 0.023 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.054 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.797 NA NA
d_asser_1 ~1 -0.017 -0.071 0.038 -0.057 -0.603 0.546
asser_t2 ~1 4.107 4.002 4.212 10.486 76.721 0.000
d_asser_1 ~~ d_asser_1 0.088 0.023 0.152 0.999 2.670 0.008
asser_t2 ~~ d_asser_1 -0.051 -0.100 -0.002 -0.445 -2.029 0.042
d_asser_1 ~ sa07_02_t1 -0.011 -0.068 0.046 -0.037 -0.379 0.705
sa07_02_t1 ~~ sa07_02_t1 1.008 0.901 1.116 1.000 18.385 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.011, p = 0.705.

6.7.7.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8159.952 8269.422 1 0 0.044
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.063 NA NA
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.800 NA NA
d_asser_1 ~1 -0.017 -0.074 0.040 -0.056 -0.594 0.553
asser_t2 ~1 4.107 4.000 4.214 10.087 75.476 0.000
d_asser_1 ~~ d_asser_1 0.092 0.030 0.154 0.982 2.912 0.004
asser_t2 ~~ d_asser_1 -0.052 -0.099 -0.005 -0.437 -2.178 0.029
asser_t2 ~ frequ 0.150 0.007 0.292 0.256 2.053 0.040
d_asser_1 ~ frequ -0.059 -0.160 0.041 -0.135 -1.162 0.245
frequ ~~ frequ 0.486 0.330 0.641 1.000 6.131 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.059, p = 0.245.

6.7.7.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6412.363 6496.289 0.921 0.048 0.062
# parameters of interest
params_lcs_energ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.971 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.634 NA NA
d_energ_1 ~1 0.003 -0.036 0.042 0.016 0.130 0.897
energ_t2 ~1 3.767 3.642 3.892 15.117 58.989 0.000
d_energ_1 ~~ d_energ_1 0.026 -0.018 0.071 0.998 1.153 0.249
energ_t2 ~~ d_energ_1 -0.011 -0.035 0.012 -0.283 -0.972 0.331
d_energ_1 ~ sa07_03_t1 0.007 -0.031 0.045 0.041 0.344 0.731
sa07_03_t1 ~~ sa07_03_t1 1.006 0.885 1.127 1.000 16.353 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.007, p = 0.731.

6.7.7.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7762.574 7872.043 0.927 0.054 0.068
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.958 NA NA
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.651 NA NA
d_energ_1 ~1 0.001 -0.040 0.043 0.008 0.065 0.949
energ_t2 ~1 3.768 3.643 3.894 14.655 58.940 0.000
d_energ_1 ~~ d_energ_1 0.030 -0.016 0.076 0.981 1.269 0.204
energ_t2 ~~ d_energ_1 -0.010 -0.032 0.012 -0.243 -0.892 0.372
energ_t2 ~ frequ 0.132 0.014 0.250 0.352 2.190 0.029
d_energ_1 ~ frequ -0.035 -0.101 0.030 -0.139 -1.058 0.290
frequ ~~ frequ 0.469 0.311 0.626 1.000 5.846 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.035, p = 0.29.

6.7.7.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6821.196 6905.122 0.976 0.036 0.04
# parameters of interest
params_lcs_compa_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.986 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.565 NA NA
d_compa_1 ~1 0.004 -0.079 0.087 0.011 0.094 0.925
compa_t2 ~1 4.329 4.226 4.433 6.737 81.802 0.000
d_compa_1 ~~ d_compa_1 0.136 0.019 0.252 1.000 2.272 0.023
compa_t2 ~~ d_compa_1 -0.063 -0.165 0.040 -0.269 -1.196 0.232
d_compa_1 ~ sa07_04_t1 -0.005 -0.090 0.079 -0.014 -0.116 0.908
sa07_04_t1 ~~ sa07_04_t1 0.995 0.876 1.114 1.000 16.389 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.005, p = 0.908.

6.7.7.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8192.394 8301.863 0.979 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.989 NA NA
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.567 NA NA
d_compa_1 ~1 0.003 -0.080 0.086 0.008 0.071 0.943
compa_t2 ~1 4.336 4.232 4.440 6.690 81.798 0.000
d_compa_1 ~~ d_compa_1 0.137 0.018 0.255 0.991 2.260 0.024
compa_t2 ~~ d_compa_1 -0.061 -0.166 0.045 -0.256 -1.129 0.259
compa_t2 ~ frequ 0.148 0.007 0.290 0.159 2.062 0.039
d_compa_1 ~ frequ -0.052 -0.197 0.094 -0.096 -0.696 0.487
frequ ~~ frequ 0.481 0.322 0.640 1.000 5.918 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.052, p = 0.487.

6.7.7.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5293.527 5377.454 0.875 0.098 0.091
# parameters of interest
params_lcs_respe_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.059 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.423 NA NA
d_respe_1 ~1 -0.008 -0.046 0.029 -0.059 -0.448 0.654
respe_t2 ~1 4.682 4.619 4.744 12.999 146.956 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.008 0.049 0.991 1.426 0.154
respe_t2 ~~ d_respe_1 -0.017 -0.036 0.003 -0.326 -1.640 0.101
d_respe_1 ~ sa07_05_t1 0.013 -0.026 0.053 0.093 0.667 0.505
sa07_05_t1 ~~ sa07_05_t1 0.994 0.819 1.168 1.000 11.166 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.013, p = 0.505.

6.7.7.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6652.44 6761.91 0.939 0.065 0.071
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.052 NA NA
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.425 NA NA
d_respe_1 ~1 -0.010 -0.045 0.025 -0.069 -0.537 0.591
respe_t2 ~1 4.684 4.621 4.747 13.574 145.043 0.000
d_respe_1 ~~ d_respe_1 0.017 -0.007 0.042 0.884 1.370 0.171
respe_t2 ~~ d_respe_1 -0.011 -0.029 0.008 -0.247 -1.137 0.256
respe_t2 ~ frequ 0.142 0.069 0.216 0.286 3.793 0.000
d_respe_1 ~ frequ -0.068 -0.126 -0.010 -0.341 -2.312 0.021
frequ ~~ frequ 0.483 0.325 0.641 1.000 5.999 0.000

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.068, p = 0.021.

6.7.7.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6623.743 6707.669 0.974 0.036 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.979 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.480 NA NA
d_trust_1 ~1 -0.013 -0.065 0.040 -0.064 -0.470 0.638
trust_t2 ~1 4.050 3.946 4.154 10.064 76.469 0.000
d_trust_1 ~~ d_trust_1 0.039 -0.012 0.089 0.998 1.501 0.133
trust_t2 ~~ d_trust_1 -0.016 -0.047 0.015 -0.200 -0.993 0.321
d_trust_1 ~ sa07_06_t1 -0.010 -0.066 0.046 -0.049 -0.341 0.733
sa07_06_t1 ~~ sa07_06_t1 0.994 0.880 1.107 1.000 17.178 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.01, p = 0.733.

6.7.7.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7974.869 8084.338 0.989 0.024 0.044
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.981 NA NA
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.476 NA NA
d_trust_1 ~1 -0.012 -0.062 0.039 -0.061 -0.449 0.654
trust_t2 ~1 4.049 3.946 4.153 10.476 76.522 0.000
d_trust_1 ~~ d_trust_1 0.033 -0.013 0.079 0.939 1.400 0.162
trust_t2 ~~ d_trust_1 -0.009 -0.036 0.019 -0.131 -0.623 0.533
trust_t2 ~ frequ 0.186 0.073 0.298 0.335 3.240 0.001
d_trust_1 ~ frequ -0.066 -0.148 0.015 -0.246 -1.590 0.112
frequ ~~ frequ 0.484 0.325 0.642 1.000 5.990 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = -0.066, p = 0.112.

6.7.7.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5717.579 5801.505 0.901 0.068 0.076
# parameters of interest
params_lcs_organ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.011 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.588 NA NA
d_organ_1 ~1 0.003 -0.058 0.064 0.011 0.090 0.928
organ_t2 ~1 4.334 4.231 4.436 9.593 82.705 0.000
d_organ_1 ~~ d_organ_1 0.069 -0.003 0.141 0.997 1.871 0.061
organ_t2 ~~ d_organ_1 -0.036 -0.089 0.017 -0.306 -1.330 0.184
d_organ_1 ~ sa07_07_t1 0.015 -0.047 0.076 0.056 0.463 0.644
sa07_07_t1 ~~ sa07_07_t1 1.012 0.916 1.109 1.000 20.565 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.015, p = 0.644.

6.7.7.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7075.562 7185.031 0.943 0.053 0.066
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.013 NA NA
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.590 NA NA
d_organ_1 ~1 0.003 -0.058 0.064 0.012 0.100 0.920
organ_t2 ~1 4.334 4.231 4.437 9.633 82.324 0.000
d_organ_1 ~~ d_organ_1 0.068 -0.004 0.139 0.987 1.855 0.064
organ_t2 ~~ d_organ_1 -0.034 -0.085 0.017 -0.297 -1.308 0.191
organ_t2 ~ frequ 0.135 0.015 0.255 0.208 2.206 0.027
d_organ_1 ~ frequ -0.043 -0.137 0.051 -0.115 -0.905 0.365
frequ ~~ frequ 0.481 0.323 0.638 1.000 5.979 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.043, p = 0.365.

6.7.7.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5066.524 5150.45 0.924 0.068 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.589 NA NA
d_produ_1 ~1 -0.053 -0.108 0.001 -0.221 -1.928 0.054
produ_t2 ~1 4.493 4.417 4.569 11.721 116.083 0.000
d_produ_1 ~~ d_produ_1 0.058 0.004 0.113 0.998 2.087 0.037
produ_t2 ~~ d_produ_1 -0.018 -0.051 0.016 -0.194 -1.042 0.297
d_produ_1 ~ sa07_08_t1 0.010 -0.035 0.055 0.042 0.437 0.662
sa07_08_t1 ~~ sa07_08_t1 1.031 0.922 1.141 1.000 18.494 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.01, p = 0.662.

6.7.7.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6415.912 6525.381 0.934 0.063 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.588 NA NA
d_produ_1 ~1 -0.055 -0.109 0.000 -0.225 -1.976 0.048
produ_t2 ~1 4.496 4.420 4.572 11.624 116.161 0.000
d_produ_1 ~~ d_produ_1 0.058 0.003 0.113 0.973 2.055 0.040
produ_t2 ~~ d_produ_1 -0.014 -0.049 0.020 -0.161 -0.812 0.417
produ_t2 ~ frequ 0.149 0.049 0.249 0.265 2.917 0.004
d_produ_1 ~ frequ -0.058 -0.139 0.023 -0.164 -1.404 0.160
frequ ~~ frequ 0.471 0.314 0.628 1.000 5.863 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = -0.058, p = 0.16.

6.7.7.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5995.099 6079.026 0.947 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.991 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.380 NA NA
d_respo_1 ~1 0.001 -0.059 0.061 0.004 0.024 0.981
respo_t2 ~1 4.325 4.218 4.431 8.636 79.824 0.000
d_respo_1 ~~ d_respo_1 0.036 -0.020 0.093 0.987 1.256 0.209
respo_t2 ~~ d_respo_1 -0.017 -0.060 0.025 -0.184 -0.799 0.424
d_respo_1 ~ sa07_09_t1 -0.022 -0.085 0.041 -0.115 -0.682 0.495
sa07_09_t1 ~~ sa07_09_t1 1.023 0.910 1.135 1.000 17.822 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.022, p = 0.495.

6.7.7.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7348 7457.469 0.96 0.048 0.052
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.990 NA NA
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.379 NA NA
d_respo_1 ~1 0.001 -0.060 0.061 0.003 0.017 0.987
respo_t2 ~1 4.326 4.220 4.432 8.609 79.971 0.000
d_respo_1 ~~ d_respo_1 0.031 -0.026 0.089 0.850 1.077 0.282
respo_t2 ~~ d_respo_1 -0.006 -0.051 0.039 -0.071 -0.267 0.789
respo_t2 ~ frequ 0.189 0.058 0.320 0.260 2.821 0.005
d_respo_1 ~ frequ -0.108 -0.214 -0.001 -0.387 -1.985 0.047
frequ ~~ frequ 0.478 0.321 0.636 1.000 5.948 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score from T2 to T3 (ideal-self) is not significantly different from zero (at p < .001), b = -0.108, p = 0.047.

6.7.7.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6633.03 6716.956 0.943 0.044 0.055
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.159 NA NA
d_anxie_1 ~1 0.017 -0.016 0.051 0.433 1.005 0.315
anxie_t2 ~1 1.430 1.357 1.504 6.233 38.231 0.000
d_anxie_1 ~~ d_anxie_1 0.001 -0.019 0.020 0.387 0.062 0.950
anxie_t2 ~~ d_anxie_1 0.005 -0.011 0.020 0.807 0.590 0.555
d_anxie_1 ~ sa07_10_t1 -0.031 -0.065 0.003 -0.783 -1.781 0.075
sa07_10_t1 ~~ sa07_10_t1 1.013 0.911 1.116 1.000 19.408 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.031, p = 0.075.

6.7.7.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7997.019 8106.488 0.984 0.025 0.051
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.153 NA NA
d_anxie_1 ~1 0.017 -0.018 0.051 0.433 0.964 0.335
anxie_t2 ~1 1.430 1.357 1.504 6.115 38.208 0.000
d_anxie_1 ~~ d_anxie_1 0.001 -0.019 0.021 0.725 0.107 0.915
anxie_t2 ~~ d_anxie_1 0.005 -0.011 0.021 0.648 0.602 0.547
anxie_t2 ~ frequ -0.032 -0.097 0.033 -0.095 -0.956 0.339
d_anxie_1 ~ frequ 0.029 -0.036 0.095 0.524 0.881 0.378
frequ ~~ frequ 0.483 0.325 0.641 1.000 5.986 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.029, p = 0.378.

6.7.7.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5153.772 5237.699 0.883 0.077 0.07
# parameters of interest
params_lcs_depre_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.029 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.519 NA NA
d_depre_1 ~1 -0.027 -0.071 0.018 -0.155 -1.168 0.243
depre_t2 ~1 1.558 1.481 1.635 4.594 39.722 0.000
d_depre_1 ~~ d_depre_1 0.029 -0.008 0.065 0.985 1.553 0.120
depre_t2 ~~ d_depre_1 -0.018 -0.047 0.010 -0.317 -1.255 0.209
d_depre_1 ~ sa07_11_t1 0.021 -0.020 0.061 0.121 1.005 0.315
sa07_11_t1 ~~ sa07_11_t1 1.002 0.904 1.100 1.000 19.977 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.021, p = 0.315.

6.7.7.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6517.44 6626.909 0.914 0.068 0.068
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.032 NA NA
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.520 NA NA
d_depre_1 ~1 -0.026 -0.072 0.020 -0.149 -1.115 0.265
depre_t2 ~1 1.559 1.482 1.636 4.465 39.689 0.000
d_depre_1 ~~ d_depre_1 0.029 -0.009 0.068 0.945 1.480 0.139
depre_t2 ~~ d_depre_1 -0.017 -0.047 0.013 -0.288 -1.110 0.267
depre_t2 ~ frequ -0.074 -0.162 0.013 -0.147 -1.669 0.095
d_depre_1 ~ frequ 0.060 -0.008 0.128 0.235 1.716 0.086
frequ ~~ frequ 0.478 0.321 0.635 1.000 5.960 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.06, p = 0.086.

6.7.7.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6133.224 6217.15 0.97 0.037 0.047
# parameters of interest
params_lcs_volat_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.388 NA NA
d_volat_1 ~1 0.050 -0.004 0.104 0.297 1.828 0.068
volat_t2 ~1 1.618 1.529 1.706 3.640 35.883 0.000
d_volat_1 ~~ d_volat_1 0.029 -0.018 0.076 1.000 1.198 0.231
volat_t2 ~~ d_volat_1 -0.018 -0.051 0.016 -0.235 -1.035 0.301
d_volat_1 ~ sa07_12_t1 0.003 -0.047 0.054 0.019 0.121 0.904
sa07_12_t1 ~~ sa07_12_t1 1.039 0.924 1.153 1.000 17.813 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.003, p = 0.904.

6.7.7.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7483.796 7593.265 0.964 0.043 0.05
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.385 NA NA
d_volat_1 ~1 0.050 -0.004 0.104 0.299 1.828 0.068
volat_t2 ~1 1.618 1.529 1.706 3.656 35.758 0.000
d_volat_1 ~~ d_volat_1 0.027 -0.020 0.074 0.962 1.136 0.256
volat_t2 ~~ d_volat_1 -0.014 -0.047 0.019 -0.197 -0.837 0.403
volat_t2 ~ frequ -0.138 -0.241 -0.034 -0.216 -2.614 0.009
d_volat_1 ~ frequ 0.047 -0.048 0.142 0.194 0.968 0.333
frequ ~~ frequ 0.479 0.322 0.637 1.000 5.960 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.047, p = 0.333.

6.7.7.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6537.691 6621.617 0.966 0.038 0.049
# parameters of interest
params_lcs_curio_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.909 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.533 NA NA
d_curio_1 ~1 -0.013 -0.073 0.047 -0.054 -0.421 0.674
curio_t2 ~1 4.490 4.418 4.562 11.119 122.684 0.000
d_curio_1 ~~ d_curio_1 0.056 -0.005 0.117 0.996 1.801 0.072
curio_t2 ~~ d_curio_1 -0.010 -0.049 0.030 -0.102 -0.476 0.634
d_curio_1 ~ sa07_13_t1 0.015 -0.043 0.073 0.064 0.505 0.613
sa07_13_t1 ~~ sa07_13_t1 1.019 0.895 1.144 1.000 16.041 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.015, p = 0.613.

6.7.7.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7900.779 8010.248 0.99 0.022 0.046
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.914 NA NA
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.541 NA NA
d_curio_1 ~1 -0.011 -0.071 0.048 -0.047 -0.369 0.712
curio_t2 ~1 4.489 4.416 4.562 11.231 120.617 0.000
d_curio_1 ~~ d_curio_1 0.054 -0.006 0.114 0.967 1.764 0.078
curio_t2 ~~ d_curio_1 -0.014 -0.054 0.026 -0.152 -0.691 0.489
curio_t2 ~ frequ 0.059 -0.045 0.162 0.103 1.113 0.266
d_curio_1 ~ frequ 0.062 -0.034 0.158 0.183 1.267 0.205
frequ ~~ frequ 0.486 0.328 0.644 1.000 6.038 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.062, p = 0.205.

6.7.7.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6535.965 6619.892 1 0 0.036
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.575 NA NA
d_aesth_1 ~1 -0.009 -0.041 0.022 -0.056 -0.569 0.569
aesth_t2 ~1 3.297 3.144 3.449 12.291 42.341 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.003 0.055 0.988 1.740 0.082
aesth_t2 ~~ d_aesth_1 -0.010 -0.025 0.004 -0.244 -1.388 0.165
d_aesth_1 ~ sa07_14_t1 -0.017 -0.050 0.015 -0.109 -1.047 0.295
sa07_14_t1 ~~ sa07_14_t1 1.019 0.922 1.116 1.000 20.596 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.017, p = 0.295.

6.7.7.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7897.198 8006.668 0.987 0.03 0.044
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.577 NA NA
d_aesth_1 ~1 -0.009 -0.040 0.022 -0.056 -0.563 0.573
aesth_t2 ~1 3.298 3.144 3.451 12.484 42.124 0.000
d_aesth_1 ~~ d_aesth_1 0.026 -0.004 0.055 0.994 1.717 0.086
aesth_t2 ~~ d_aesth_1 -0.008 -0.021 0.005 -0.201 -1.204 0.229
aesth_t2 ~ frequ 0.111 0.027 0.195 0.291 2.594 0.009
d_aesth_1 ~ frequ -0.019 -0.069 0.032 -0.080 -0.729 0.466
frequ ~~ frequ 0.475 0.318 0.633 1.000 5.905 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score from T2 to T3 (ideal-self) is not significantly different from zero, b = -0.019, p = 0.466.

6.7.7.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6155.656 6239.582 0.934 0.056 0.063
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.944 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.481 NA NA
d_imagi_1 ~1 0.034 -0.032 0.101 0.142 1.007 0.314
imagi_t2 ~1 4.512 4.432 4.592 9.559 110.495 0.000
d_imagi_1 ~~ d_imagi_1 0.057 -0.010 0.124 0.980 1.655 0.098
imagi_t2 ~~ d_imagi_1 -0.012 -0.070 0.046 -0.107 -0.394 0.693
d_imagi_1 ~ sa07_15_t1 0.033 -0.030 0.097 0.140 1.030 0.303
sa07_15_t1 ~~ sa07_15_t1 1.019 0.928 1.109 1.000 22.048 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.033, p = 0.303.

6.7.7.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7523.08 7632.549 0.976 0.034 0.052
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7_fu, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.942 NA NA
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.482 NA NA
d_imagi_1 ~1 0.034 -0.033 0.101 0.140 0.991 0.322
imagi_t2 ~1 4.514 4.434 4.594 9.520 110.076 0.000
d_imagi_1 ~~ d_imagi_1 0.059 -0.011 0.129 1.000 1.641 0.101
imagi_t2 ~~ d_imagi_1 -0.015 -0.078 0.047 -0.135 -0.482 0.630
imagi_t2 ~ frequ 0.097 -0.005 0.198 0.142 1.872 0.061
d_imagi_1 ~ frequ 0.005 -0.103 0.112 0.013 0.084 0.933
frequ ~~ frequ 0.480 0.322 0.637 1.000 5.970 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score from T2 to T3 (ideal-self) is not significantly different from zero, b = 0.005, p = 0.933.

6.7.8 Big Five facets (current self)

6.7.8.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7723.128 7810.922 0.961 0.073 0.042
# parameters of interest
params_lcs_socia_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.479 NA NA
d_socia_1 ~1 0.163 0.079 0.246 0.369 3.831 0.000
socia_t1 ~1 2.857 2.734 2.980 2.890 45.641 0.000
d_socia_1 ~~ d_socia_1 0.187 0.099 0.276 0.967 4.169 0.000
socia_t1 ~~ d_socia_1 -0.124 -0.188 -0.060 -0.334 -3.805 0.000
d_socia_1 ~ sa07_01_t1 0.081 0.009 0.152 0.183 2.207 0.027
sa07_01_t1 ~~ sa07_01_t1 0.997 0.892 1.102 1.000 18.622 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (current-self) is not significantly different from zero (at p < .001), b = 0.081, p = 0.027.

6.7.8.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9022.657 9137.171 0.963 0.061 0.043
# parameters of interest
params_lcs_socia_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.478 NA NA
d_socia_1 ~1 0.161 0.078 0.243 0.368 3.797 0.000
socia_t1 ~1 2.858 2.724 2.992 2.917 41.743 0.000
d_socia_1 ~~ d_socia_1 0.189 0.101 0.278 0.998 4.181 0.000
socia_t1 ~~ d_socia_1 -0.160 -0.235 -0.085 -0.375 -4.166 0.000
socia_t1 ~ frequ 0.031 -0.190 0.252 0.022 0.275 0.783
d_socia_1 ~ frequ -0.026 -0.165 0.112 -0.042 -0.374 0.709
frequ ~~ frequ 0.485 0.327 0.643 1.000 6.013 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (current-self) is not significantly different from zero, b = -0.026, p = 0.709.

6.7.8.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7889.858 7977.652 0.983 0.041 0.039
# parameters of interest
params_lcs_asser_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.003 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.372 NA NA
d_asser_1 ~1 0.060 0.000 0.120 0.219 1.960 0.050
asser_t1 ~1 3.102 2.989 3.215 4.210 53.756 0.000
d_asser_1 ~~ d_asser_1 0.073 0.019 0.127 0.982 2.652 0.008
asser_t1 ~~ d_asser_1 -0.030 -0.074 0.013 -0.161 -1.363 0.173
d_asser_1 ~ sa07_02_t1 0.037 -0.021 0.095 0.135 1.245 0.213
sa07_02_t1 ~~ sa07_02_t1 0.997 0.898 1.096 1.000 19.717 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (current-self) is not significantly different from zero, b = 0.037, p = 0.213.

6.7.8.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9129.361 9243.874 0.988 0.031 0.042
# parameters of interest
params_lcs_asser_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.369 NA NA
d_asser_1 ~1 0.054 -0.002 0.111 0.208 1.875 0.061
asser_t1 ~1 3.105 2.986 3.224 4.407 51.115 0.000
d_asser_1 ~~ d_asser_1 0.066 0.016 0.115 0.965 2.613 0.009
asser_t1 ~~ d_asser_1 -0.036 -0.078 0.007 -0.199 -1.642 0.101
asser_t1 ~ frequ 0.108 -0.064 0.280 0.105 1.228 0.219
d_asser_1 ~ frequ 0.071 -0.027 0.169 0.188 1.428 0.153
frequ ~~ frequ 0.471 0.310 0.632 1.000 5.748 0.000

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (current-self) is not significantly different from zero, b = 0.071, p = 0.153.

6.7.8.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7985.878 8073.671 0.987 0.034 0.045
# parameters of interest
params_lcs_energ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.018 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA
d_energ_1 ~1 0.046 0.008 0.084 0.257 2.378 0.017
energ_t1 ~1 3.325 3.214 3.435 8.893 58.851 0.000
d_energ_1 ~~ d_energ_1 0.032 0.002 0.061 0.978 2.084 0.037
energ_t1 ~~ d_energ_1 -0.014 -0.030 0.002 -0.236 -1.656 0.098
d_energ_1 ~ sa07_03_t1 0.026 -0.007 0.060 0.147 1.554 0.120
sa07_03_t1 ~~ sa07_03_t1 0.997 0.889 1.105 1.000 18.028 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (current-self) is not significantly different from zero, b = 0.026, p = 0.12.

6.7.8.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9279.408 9393.921 0.984 0.033 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA
d_energ_1 ~1 0.047 0.007 0.087 0.257 2.328 0.020
energ_t1 ~1 3.324 3.211 3.436 8.612 57.905 0.000
d_energ_1 ~~ d_energ_1 0.034 0.001 0.066 0.986 2.040 0.041
energ_t1 ~~ d_energ_1 -0.021 -0.042 0.001 -0.291 -1.846 0.065
energ_t1 ~ frequ 0.051 -0.049 0.151 0.091 0.998 0.318
d_energ_1 ~ frequ 0.031 -0.026 0.088 0.116 1.061 0.289
frequ ~~ frequ 0.479 0.322 0.636 1.000 5.994 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (current-self) is not significantly different from zero, b = 0.031, p = 0.289.

6.7.8.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7815.468 7903.262 0.972 0.045 0.045
# parameters of interest
params_lcs_compa_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.893 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.554 NA NA
d_compa_1 ~1 0.045 -0.026 0.116 0.118 1.246 0.213
compa_t1 ~1 4.213 4.125 4.302 6.866 93.614 0.000
d_compa_1 ~~ d_compa_1 0.143 0.046 0.241 0.991 2.894 0.004
compa_t1 ~~ d_compa_1 -0.032 -0.095 0.032 -0.144 -0.978 0.328
d_compa_1 ~ sa07_04_t1 -0.035 -0.118 0.048 -0.093 -0.838 0.402
sa07_04_t1 ~~ sa07_04_t1 0.997 0.893 1.101 1.000 18.799 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (current-self) is not significantly different from zero, b = -0.035, p = 0.402.

6.7.8.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9057.893 9172.407 0.973 0.041 0.05
# parameters of interest
params_lcs_compa_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.897 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.551 NA NA
d_compa_1 ~1 0.051 -0.021 0.123 0.130 1.380 0.168
compa_t1 ~1 4.213 4.123 4.303 6.594 91.762 0.000
d_compa_1 ~~ d_compa_1 0.154 0.048 0.259 0.998 2.846 0.004
compa_t1 ~~ d_compa_1 -0.025 -0.091 0.040 -0.103 -0.754 0.451
compa_t1 ~ frequ 0.183 0.038 0.327 0.197 2.478 0.013
d_compa_1 ~ frequ -0.024 -0.157 0.109 -0.042 -0.354 0.723
frequ ~~ frequ 0.476 0.318 0.635 1.000 5.888 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (current-self) is not significantly different from zero, b = -0.024, p = 0.723.

6.7.8.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6771.62 6859.414 0.967 0.052 0.054
# parameters of interest
params_lcs_respe_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.020 -0.037 0.077 0.062 0.700 0.484
respe_t1 ~1 4.444 4.377 4.511 8.490 129.561 0.000
d_respe_1 ~~ d_respe_1 0.104 0.028 0.179 0.955 2.703 0.007
respe_t1 ~~ d_respe_1 -0.067 -0.117 -0.018 -0.429 -2.663 0.008
d_respe_1 ~ sa07_05_t1 -0.070 -0.142 0.003 -0.212 -1.891 0.059
sa07_05_t1 ~~ sa07_05_t1 0.997 0.842 1.152 1.000 12.613 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = -0.07, p = 0.059.

6.7.8.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8051.419 8165.932 0.965 0.049 0.065
# parameters of interest
params_lcs_respe_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.024 -0.034 0.081 0.072 0.809 0.418
respe_t1 ~1 4.444 4.374 4.514 8.477 124.257 0.000
d_respe_1 ~~ d_respe_1 0.109 0.025 0.192 0.992 2.551 0.011
respe_t1 ~~ d_respe_1 -0.055 -0.106 -0.004 -0.319 -2.104 0.035
respe_t1 ~ frequ 0.056 -0.059 0.171 0.074 0.955 0.340
d_respe_1 ~ frequ 0.044 -0.052 0.140 0.092 0.899 0.369
frequ ~~ frequ 0.479 0.322 0.636 1.000 5.972 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current-self) is not significantly different from zero, b = 0.044, p = 0.369.

6.7.8.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8103.023 8190.817 0.966 0.051 0.049
# parameters of interest
params_lcs_trust_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.040 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.314 NA NA
d_trust_1 ~1 0.095 0.027 0.163 0.442 2.723 0.006
trust_t1 ~1 3.150 3.033 3.267 4.439 52.717 0.000
d_trust_1 ~~ d_trust_1 0.038 -0.032 0.109 0.833 1.066 0.287
trust_t1 ~~ d_trust_1 -0.025 -0.081 0.031 -0.186 -0.873 0.382
d_trust_1 ~ sa07_06_t1 0.088 0.016 0.159 0.409 2.403 0.016
sa07_06_t1 ~~ sa07_06_t1 0.997 0.893 1.101 1.000 18.829 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (current-self) is not significantly different from zero (at p < .001), b = 0.088, p = 0.016.

6.7.8.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9338.825 9453.339 0.963 0.049 0.063
# parameters of interest
params_lcs_trust_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.312 NA NA
d_trust_1 ~1 0.094 0.025 0.163 0.445 2.683 0.007
trust_t1 ~1 3.151 3.033 3.268 4.463 52.484 0.000
d_trust_1 ~~ d_trust_1 0.044 -0.028 0.116 0.976 1.193 0.233
trust_t1 ~~ d_trust_1 -0.042 -0.100 0.016 -0.288 -1.432 0.152
trust_t1 ~ frequ 0.088 -0.081 0.258 0.086 1.020 0.308
d_trust_1 ~ frequ 0.047 -0.065 0.160 0.154 0.826 0.409
frequ ~~ frequ 0.477 0.320 0.635 1.000 5.946 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (current-self) is not significantly different from zero, b = 0.047, p = 0.409.

6.7.8.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7669.741 7757.534 1 0 0.023
# parameters of interest
params_lcs_organ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.507 NA NA
d_organ_1 ~1 0.067 -0.015 0.149 0.142 1.604 0.109
organ_t1 ~1 3.036 2.917 3.156 3.242 49.816 0.000
d_organ_1 ~~ d_organ_1 0.224 0.113 0.335 0.999 3.955 0.000
organ_t1 ~~ d_organ_1 -0.105 -0.182 -0.029 -0.290 -2.703 0.007
d_organ_1 ~ sa07_07_t1 0.018 -0.061 0.096 0.037 0.438 0.661
sa07_07_t1 ~~ sa07_07_t1 0.997 0.910 1.084 1.000 22.344 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (current-self) is not significantly different from zero, b = 0.018, p = 0.661.

6.7.8.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8999.082 9113.596 1 0 0.029
# parameters of interest
params_lcs_organ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA
d_organ_1 ~1 0.065 -0.016 0.146 0.139 1.568 0.117
organ_t1 ~1 3.037 2.902 3.172 3.309 44.128 0.000
d_organ_1 ~~ d_organ_1 0.216 0.108 0.324 0.998 3.925 0.000
organ_t1 ~~ d_organ_1 -0.113 -0.195 -0.032 -0.268 -2.726 0.006
organ_t1 ~ frequ 0.191 -0.018 0.401 0.144 1.788 0.074
d_organ_1 ~ frequ 0.027 -0.109 0.162 0.040 0.387 0.699
frequ ~~ frequ 0.480 0.322 0.637 1.000 5.969 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (current-self) is not significantly different from zero, b = 0.027, p = 0.699.

6.7.8.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7582.008 7669.802 0.966 0.061 0.043
# parameters of interest
params_lcs_produ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.540 NA NA
d_produ_1 ~1 0.126 0.052 0.200 0.320 3.344 0.001
produ_t1 ~1 2.571 2.450 2.693 3.657 41.473 0.000
d_produ_1 ~~ d_produ_1 0.154 0.078 0.230 0.989 3.954 0.000
produ_t1 ~~ d_produ_1 -0.041 -0.090 0.009 -0.182 -1.616 0.106
d_produ_1 ~ sa07_08_t1 0.042 -0.027 0.111 0.107 1.198 0.231
sa07_08_t1 ~~ sa07_08_t1 0.997 0.897 1.097 1.000 19.477 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (current-self) is not significantly different from zero, b = 0.042, p = 0.231.

6.7.8.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8896.383 9010.896 0.968 0.051 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.960 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.541 NA NA
d_produ_1 ~1 0.127 0.053 0.201 0.323 3.361 0.001
produ_t1 ~1 2.572 2.444 2.700 3.692 39.276 0.000
d_produ_1 ~~ d_produ_1 0.151 0.075 0.227 0.978 3.879 0.000
produ_t1 ~~ d_produ_1 -0.062 -0.118 -0.005 -0.231 -2.150 0.032
produ_t1 ~ frequ 0.143 -0.025 0.312 0.141 1.669 0.095
d_produ_1 ~ frequ 0.085 -0.035 0.205 0.149 1.385 0.166
frequ ~~ frequ 0.471 0.311 0.631 1.000 5.764 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (current-self) is not significantly different from zero, b = 0.085, p = 0.166.

6.7.8.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7701.938 7789.732 0.893 0.099 0.085
# parameters of interest
params_lcs_respo_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.017 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.509 NA NA
d_respo_1 ~1 0.019 -0.017 0.055 0.107 1.057 0.291
respo_t1 ~1 3.659 3.559 3.759 10.144 71.769 0.000
d_respo_1 ~~ d_respo_1 0.032 0.001 0.063 0.980 2.001 0.045
respo_t1 ~~ d_respo_1 -0.014 -0.031 0.003 -0.248 -1.578 0.114
d_respo_1 ~ sa07_09_t1 0.026 -0.012 0.063 0.141 1.333 0.183
sa07_09_t1 ~~ sa07_09_t1 0.997 0.896 1.098 1.000 19.415 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (current-self) is not significantly different from zero, b = 0.026, p = 0.183.

6.7.8.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9001.348 9115.861 0.895 0.087 0.088
# parameters of interest
params_lcs_respo_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.015 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.507 NA NA
d_respo_1 ~1 0.019 -0.017 0.056 0.106 1.045 0.296
respo_t1 ~1 3.659 3.557 3.760 9.957 70.684 0.000
d_respo_1 ~~ d_respo_1 0.034 0.000 0.067 0.999 1.978 0.048
respo_t1 ~~ d_respo_1 -0.019 -0.039 0.002 -0.278 -1.804 0.071
respo_t1 ~ frequ 0.030 -0.065 0.124 0.056 0.617 0.537
d_respo_1 ~ frequ -0.009 -0.064 0.045 -0.035 -0.335 0.737
frequ ~~ frequ 0.485 0.327 0.643 1.000 6.019 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (current-self) is not significantly different from zero, b = -0.009, p = 0.737.

6.7.8.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7902.5 7990.294 1 0 0.027
# parameters of interest
params_lcs_anxie_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.983 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.430 NA NA
d_anxie_1 ~1 -0.185 -0.268 -0.101 -0.451 -4.333 0.000
anxie_t1 ~1 3.121 2.996 3.246 3.331 48.870 0.000
d_anxie_1 ~~ d_anxie_1 0.168 0.072 0.264 0.999 3.427 0.001
anxie_t1 ~~ d_anxie_1 -0.074 -0.147 0.000 -0.213 -1.968 0.049
d_anxie_1 ~ sa07_10_t1 0.012 -0.068 0.092 0.029 0.293 0.769
sa07_10_t1 ~~ sa07_10_t1 0.997 0.906 1.088 1.000 21.431 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (current-self) is not significantly different from zero, b = 0.012, p = 0.769.

6.7.8.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9173.393 9287.907 0.99 0.028 0.043
# parameters of interest
params_lcs_anxie_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.982 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.428 NA NA
d_anxie_1 ~1 -0.189 -0.274 -0.104 -0.457 -4.370 0.000
anxie_t1 ~1 3.124 2.992 3.255 3.288 46.499 0.000
d_anxie_1 ~~ d_anxie_1 0.155 0.060 0.251 0.903 3.188 0.001
anxie_t1 ~~ d_anxie_1 -0.048 -0.131 0.036 -0.129 -1.114 0.265
anxie_t1 ~ frequ 0.237 0.053 0.420 0.176 2.529 0.011
d_anxie_1 ~ frequ -0.183 -0.323 -0.043 -0.312 -2.565 0.010
frequ ~~ frequ 0.497 0.336 0.658 1.000 6.055 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (current-self) is not significantly different from zero (at p < .001), b = -0.183, p = 0.01.

6.7.8.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7807.04 7894.833 0.954 0.077 0.06
# parameters of interest
params_lcs_depre_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.987 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.508 NA NA
d_depre_1 ~1 -0.128 -0.181 -0.074 -0.446 -4.685 0.000
depre_t1 ~1 2.975 2.862 3.087 5.351 51.805 0.000
d_depre_1 ~~ d_depre_1 0.081 0.044 0.119 0.997 4.261 0.000
depre_t1 ~~ d_depre_1 -0.033 -0.055 -0.010 -0.232 -2.853 0.004
d_depre_1 ~ sa07_11_t1 -0.016 -0.059 0.028 -0.055 -0.708 0.479
sa07_11_t1 ~~ sa07_11_t1 0.997 0.908 1.086 1.000 21.989 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (current-self) is not significantly different from zero, b = -0.016, p = 0.479.

6.7.8.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9090.065 9204.578 0.955 0.066 0.066
# parameters of interest
params_lcs_depre_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.985 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.505 NA NA
d_depre_1 ~1 -0.127 -0.180 -0.073 -0.446 -4.646 0.000
depre_t1 ~1 2.975 2.858 3.092 5.357 49.875 0.000
d_depre_1 ~~ d_depre_1 0.076 0.040 0.112 0.940 4.169 0.000
depre_t1 ~~ d_depre_1 -0.031 -0.056 -0.006 -0.205 -2.429 0.015
depre_t1 ~ frequ 0.095 -0.022 0.212 0.119 1.594 0.111
d_depre_1 ~ frequ -0.100 -0.183 -0.017 -0.245 -2.368 0.018
frequ ~~ frequ 0.486 0.327 0.645 1.000 5.985 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (current-self) is not significantly different from zero (at p < .001), b = -0.1, p = 0.018.

6.7.8.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7981.646 8069.44 0.99 0.032 0.037
# parameters of interest
params_lcs_volat_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.057 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.452 NA NA
d_volat_1 ~1 -0.132 -0.211 -0.053 -0.325 -3.264 0.001
volat_t1 ~1 3.118 2.992 3.244 3.288 48.611 0.000
d_volat_1 ~~ d_volat_1 0.159 0.065 0.252 0.965 3.319 0.001
volat_t1 ~~ d_volat_1 -0.098 -0.175 -0.021 -0.288 -2.481 0.013
d_volat_1 ~ sa07_12_t1 -0.076 -0.157 0.005 -0.187 -1.847 0.065
sa07_12_t1 ~~ sa07_12_t1 0.997 0.893 1.101 1.000 18.847 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (current-self) is not significantly different from zero, b = -0.076, p = 0.065.

6.7.8.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9256.21 9370.723 0.985 0.035 0.045
# parameters of interest
params_lcs_volat_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.056 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.450 NA NA
d_volat_1 ~1 -0.133 -0.213 -0.053 -0.327 -3.266 0.001
volat_t1 ~1 3.119 2.986 3.251 3.272 45.993 0.000
d_volat_1 ~~ d_volat_1 0.165 0.069 0.260 1.000 3.386 0.001
volat_t1 ~~ d_volat_1 -0.130 -0.208 -0.051 -0.335 -3.252 0.001
volat_t1 ~ frequ 0.072 -0.126 0.270 0.053 0.714 0.475
d_volat_1 ~ frequ 0.008 -0.131 0.148 0.015 0.119 0.906
frequ ~~ frequ 0.490 0.329 0.651 1.000 5.976 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (current-self) is significantly different from zero, b = 0.008, p = 0.906.

6.7.8.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7667.624 7755.418 0.982 0.038 0.047
# parameters of interest
params_lcs_curio_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.061 0.014 0.107 NA 2.563 0.010
curio_t1 ~1 4.032 3.936 4.127 7.055 82.973 0.000
d_curio_1 ~~ d_curio_1 -0.015 -0.053 0.023 NA -0.793 0.428
curio_t1 ~~ d_curio_1 -0.008 -0.040 0.025 -0.113 -0.455 0.649
d_curio_1 ~ sa07_13_t1 0.057 0.015 0.100 NA 2.645 0.008
sa07_13_t1 ~~ sa07_13_t1 0.997 0.885 1.109 1.000 17.438 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (current-self) is not significantly different from zero (at p < .001), b = 0.057, p = 0.008.

6.7.8.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8908.917 9023.431 0.991 0.025 0.04
# parameters of interest
params_lcs_curio_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.060 0.013 0.106 NA 2.530 0.011
curio_t1 ~1 4.032 3.933 4.131 7.155 79.542 0.000
d_curio_1 ~~ d_curio_1 -0.014 -0.050 0.023 NA -0.724 0.469
curio_t1 ~~ d_curio_1 -0.020 -0.054 0.014 -0.304 -1.156 0.248
curio_t1 ~ frequ 0.094 -0.026 0.214 0.116 1.539 0.124
d_curio_1 ~ frequ 0.050 -0.026 0.127 NA 1.300 0.194
frequ ~~ frequ 0.478 0.321 0.634 1.000 5.972 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (current-self) is not significantly different from zero, b = 0.05, p = 0.194.

6.7.8.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7960.573 8048.367 1 0 0.037
# parameters of interest
params_lcs_aesth_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.996 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.377 NA NA
d_aesth_1 ~1 -0.001 -0.030 0.027 -0.011 -0.096 0.923
aesth_t1 ~1 3.152 3.030 3.274 9.256 50.669 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.005 0.039 0.999 1.485 0.137
aesth_t1 ~~ d_aesth_1 -0.008 -0.021 0.004 -0.201 -1.320 0.187
d_aesth_1 ~ sa07_14_t1 -0.004 -0.032 0.024 -0.031 -0.281 0.779
sa07_14_t1 ~~ sa07_14_t1 0.997 0.908 1.086 1.000 21.957 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (current-self) is not significantly different from zero, b = -0.004, p = 0.779.

6.7.8.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9195.052 9309.565 0.982 0.037 0.045
# parameters of interest
params_lcs_aesth_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.998 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.379 NA NA
d_aesth_1 ~1 -0.001 -0.029 0.027 -0.010 -0.085 0.932
aesth_t1 ~1 3.152 3.030 3.275 9.451 50.346 0.000
d_aesth_1 ~~ d_aesth_1 0.015 -0.005 0.036 0.940 1.444 0.149
aesth_t1 ~~ d_aesth_1 -0.011 -0.024 0.003 -0.267 -1.489 0.136
aesth_t1 ~ frequ 0.128 0.043 0.214 0.265 2.932 0.003
d_aesth_1 ~ frequ 0.045 -0.010 0.100 0.245 1.606 0.108
frequ ~~ frequ 0.476 0.318 0.634 1.000 5.894 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (current-self) is not significantly different from zero, b = 0.045, p = 0.108.

6.7.8.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7639.965 7727.759 0.939 0.074 0.056
# parameters of interest
params_lcs_imagi_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.073 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.436 NA NA
d_imagi_1 ~1 0.131 0.069 0.193 0.482 4.152 0.000
imagi_t1 ~1 3.641 3.541 3.740 5.427 71.569 0.000
d_imagi_1 ~~ d_imagi_1 0.073 -0.024 0.169 0.978 1.469 0.142
imagi_t1 ~~ d_imagi_1 -0.054 -0.118 0.010 -0.339 -1.655 0.098
d_imagi_1 ~ sa07_15_t1 0.040 -0.028 0.109 0.148 1.150 0.250
sa07_15_t1 ~~ sa07_15_t1 0.997 0.913 1.081 1.000 23.329 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (current-self) is not significantly different from zero, b = 0.04, p = 0.25.

6.7.8.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8917.338 9031.852 0.952 0.058 0.056
# parameters of interest
params_lcs_imagi_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.427 NA NA
d_imagi_1 ~1 0.132 0.071 0.194 0.485 4.201 0.000
imagi_t1 ~1 3.641 3.536 3.745 5.343 68.382 0.000
d_imagi_1 ~~ d_imagi_1 0.074 -0.027 0.175 0.998 1.444 0.149
imagi_t1 ~~ d_imagi_1 -0.066 -0.145 0.012 -0.360 -1.656 0.098
imagi_t1 ~ frequ 0.130 -0.026 0.285 0.131 1.635 0.102
d_imagi_1 ~ frequ 0.016 -0.102 0.135 0.041 0.271 0.787
frequ ~~ frequ 0.474 0.315 0.633 1.000 5.841 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (current-self) is not significantly different from zero, b = 0.016, p = 0.787.

6.7.9 Hyp 7: Effects summary

6.7.9.1 Summary: Ideal self

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7 <- df_table_hyp7_main %>% left_join(df_table_hyp7_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals -0.020 -0.076 0.438 -0.042 -0.103 0.390
extraversion frequency -0.019 -0.072 0.465 0.010 0.026 0.823
agreeableness goals 0.006 0.021 0.795 -0.017 -0.040 0.682
agreeableness frequency 0.006 0.023 0.770 0.031 0.078 0.422
conscientiousness goals 0.026 0.081 0.273 -0.056 -0.132 0.118
conscientiousness frequency 0.027 0.085 0.248 0.060 0.131 0.111
neuroticism goals -0.007 -0.019 0.817 -0.014 -0.027 0.741
neuroticism frequency -0.006 -0.018 0.821 0.029 0.057 0.569
openness goals 0.014 0.068 0.381 0.027 0.073 0.344
openness frequency 0.015 0.069 0.368 0.010 0.032 0.717

No significant main or moderator effects at the domain level (ideal self) that are significantly different from zero.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals -0.062 -0.323 0.043 -0.065 -0.341 0.034
sociability frequency -0.062 -0.320 0.048 -0.024 -0.086 0.639
assertiveness goals -0.025 -0.154 0.306 0.031 0.189 0.231
assertiveness frequency -0.026 -0.155 0.312 -0.011 -0.046 0.800
energy goals -0.002 -0.014 0.885 -0.002 -0.010 0.915
energy frequency 0.000 0.002 0.986 0.024 0.096 0.409
compassion goals 0.016 0.046 0.689 0.010 0.029 0.821
compassion frequency 0.020 0.053 0.646 0.000 -0.001 0.996
respectfulness goals -0.001 -0.009 0.950 -0.005 -0.036 0.820
respectfulness frequency -0.001 -0.006 0.968 0.033 0.157 0.348
trust goals 0.014 0.052 0.653 0.013 0.047 0.697
trust frequency 0.015 0.056 0.626 0.065 0.165 0.232
organization goals 0.005 0.019 0.861 -0.029 -0.112 0.334
organization frequency 0.005 0.019 0.860 0.003 0.009 0.947
productiveness goals 0.028 0.117 0.241 -0.035 -0.146 0.141
productiveness frequency 0.029 0.123 0.216 0.077 0.219 0.053
responsibility goals 0.017 0.063 0.534 -0.030 -0.113 0.272
responsibility frequency 0.018 0.066 0.512 0.071 0.181 0.105
anxiety goals -0.019 -0.076 0.515 0.004 0.014 0.890
anxiety frequency -0.020 -0.079 0.508 0.077 0.210 0.135
depression goals -0.006 -0.024 0.813 0.006 0.024 0.804
depression frequency -0.006 -0.022 0.821 0.033 0.084 0.472
volatility goals -0.010 -0.038 0.758 -0.055 -0.216 0.064
volatility frequency -0.009 -0.034 0.788 -0.033 -0.090 0.545
curiosity goals 0.017 0.081 0.532 0.029 0.138 0.222
curiosity frequency 0.017 0.081 0.540 0.027 0.090 0.520
aesthetic goals 0.020 0.119 0.240 0.006 0.037 0.646
aesthetic frequency 0.019 0.117 0.252 0.021 0.091 0.470
imagination goals -0.012 -0.035 0.718 -0.019 -0.056 0.566
imagination frequency -0.012 -0.035 0.717 -0.031 -0.066 0.580

No significant main or moderator effects at the domain level (ideal self) that are significantly different from zero at p < .001.

  • Only at p < .05: The facet-specific acceptance goal moderates changes in ideal-level sociability.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("ideal", levels = c("ideal"), labels = c("ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • ideal = ideal-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator

Important: these are 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7.9.2 Summary: Current self

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_curr_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_curr_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7_curr <- df_table_hyp7_curr_main %>% left_join(df_table_hyp7_curr_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion goals 0.092 0.345 0.000 0.052 0.139 0.244
extraversion frequency 0.089 0.342 0.000 0.041 0.108 0.310
agreeableness goals 0.024 0.120 0.175 -0.048 -0.163 0.154
agreeableness frequency 0.027 0.129 0.144 0.032 0.109 0.321
conscientiousness goals 0.074 0.212 0.004 0.042 0.092 0.253
conscientiousness frequency 0.074 0.213 0.004 0.029 0.057 0.478
neuroticism goals -0.176 -0.474 0.000 -0.010 -0.018 0.824
neuroticism frequency -0.176 -0.472 0.000 -0.118 -0.221 0.018
openness goals 0.075 0.317 0.001 0.052 0.130 0.201
openness frequency 0.076 0.317 0.001 0.059 0.168 0.179

Significant main effects except for agreeableness. No moderation effects at the domain level that are significantly different from zero at p < .001:

  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level neuroticism.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability goals 0.163 0.369 0.000 0.081 0.183 0.027
sociability frequency 0.161 0.368 0.000 -0.026 -0.042 0.709
assertiveness goals 0.060 0.219 0.050 0.037 0.135 0.213
assertiveness frequency 0.054 0.208 0.061 0.071 0.188 0.153
energy goals 0.046 0.257 0.017 0.026 0.147 0.120
energy frequency 0.047 0.257 0.020 0.031 0.116 0.289
compassion goals 0.045 0.118 0.213 -0.035 -0.093 0.402
compassion frequency 0.051 0.130 0.168 -0.024 -0.042 0.723
respectfulness goals 0.020 0.062 0.484 -0.070 -0.212 0.059
respectfulness frequency 0.024 0.072 0.418 0.044 0.092 0.369
trust goals 0.095 0.442 0.006 0.088 0.409 0.016
trust frequency 0.094 0.445 0.007 0.047 0.154 0.409
organization goals 0.067 0.142 0.109 0.018 0.037 0.661
organization frequency 0.065 0.139 0.117 0.027 0.040 0.699
productiveness goals 0.126 0.320 0.001 0.042 0.107 0.231
productiveness frequency 0.127 0.323 0.001 0.085 0.149 0.166
responsibility goals 0.019 0.107 0.291 0.026 0.141 0.183
responsibility frequency 0.019 0.106 0.296 -0.009 -0.035 0.737
anxiety goals -0.185 -0.451 0.000 0.012 0.029 0.769
anxiety frequency -0.189 -0.457 0.000 -0.183 -0.312 0.010
depression goals -0.128 -0.446 0.000 -0.016 -0.055 0.479
depression frequency -0.127 -0.446 0.000 -0.100 -0.245 0.018
volatility goals -0.132 -0.325 0.001 -0.076 -0.187 0.065
volatility frequency -0.133 -0.327 0.001 0.008 0.015 0.906
curiosity goals 0.061 NA 0.010 0.057 NA 0.008
curiosity frequency 0.060 NA 0.011 0.050 NA 0.194
aesthetic goals -0.001 -0.011 0.923 -0.004 -0.031 0.779
aesthetic frequency -0.001 -0.010 0.932 0.045 0.245 0.108
imagination goals 0.131 0.482 0.000 0.040 0.148 0.250
imagination frequency 0.132 0.485 0.000 0.016 0.041 0.787

No moderation effects at the facet level that are significantly different from zero at p < .001:

  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level trust.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level anxiety.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level depression.
  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level curiosity.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot_curr <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("goals", "frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot_curr <- df_table_hyp7_plot_curr %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("current", levels = c("current"), labels = c("current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("goals", "frequency"), labels = c("goals", "frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • goals = specific, facet-level acceptance goal(s) as moderator
  • frequency = frequency of self-acceptance behavior as moderator

Important: these are 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp7_plot_curr, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


6.8 Differences in change across intervention groups (Hyp 6 in paper)

Change in psychological well-being indicators as well as the difference between real- and ideal-self will differ across groups at follow-up. Based on exploratory results from Study 1, we expect that the self-acceptance intervention leads to more pronounced well-being gains and less pronounced differences between current- and ideal-self personality compared to the self-improvement intervention.

6.8.1 Well-being change: differences across groups

6.8.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_swls_group_config 50 13077 13248 125.00                              
lcs_swls_group_weak   53 13073 13231 127.59     3.1604       3     0.3675
lcs_swls_group_strong 58 13066 13202 130.93     3.3369       5     0.6482
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int_a 0.246 0.419 5.644 0
d_swls_1 ~1 d_int_b 0.296 0.415 6.155 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int 0.267 0.454 8.195 0
d_swls_1 ~1 d_int 0.267 0.374 8.195 0

Slightly more positive change in life satisfaction in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 57 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               127.587     114.982
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.110
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             68.718      61.929
    Self-Improvement                            58.869      53.053

Model Test Baseline Model:

  Test statistic                              3183.172    2343.602
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.358

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.976       0.973
  Tucker-Lewis Index (TLI)                       0.975       0.971
                                                                  
  Robust Comparative Fit Index (CFI)                         0.978
  Robust Tucker-Lewis Index (TLI)                            0.977

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6501.579   -6501.579
  Scaling correction factor                                  0.703
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -6437.786   -6437.786
  Scaling correction factor                                  1.132
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               13073.158   13073.158
  Bayesian (BIC)                             13231.070   13231.070
  Sample-size adjusted Bayesian (SABIC)      13119.942   13119.942

Root Mean Square Error of Approximation:

  RMSEA                                          0.065       0.059
  90 Percent confidence interval - lower         0.050       0.045
  90 Percent confidence interval - upper         0.079       0.073
  P-value H_0: RMSEA <= 0.050                    0.046       0.140
  P-value H_0: RMSEA >= 0.080                    0.040       0.006
                                                                  
  Robust RMSEA                                               0.065
  90 Percent confidence interval - lower                     0.048
  90 Percent confidence interval - upper                     0.082
  P-value H_0: Robust RMSEA <= 0.050                         0.073
  P-value H_0: Robust RMSEA >= 0.080                         0.068

Standardized Root Mean Square Residual:

  SRMR                                           0.035       0.035

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.993    0.839
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.879    0.775
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.031    0.858
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.903    0.721
  swls_t2 =~                                                            
    s06_01_           1.000                               1.052    0.853
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.931    0.793
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.092    0.870
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.956    0.741
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.559    0.559

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.944    0.944

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_a)   -0.113    0.040   -2.791    0.005   -0.193   -0.193
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.050    0.044    1.136    0.256    0.050    0.121
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.210    0.043    4.924    0.000    0.210    0.408
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.034    0.040    0.859    0.390    0.034    0.089
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.289    0.064    4.514    0.000    0.289    0.384

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.246    0.044    5.644    0.000    0.419    0.419
    swls_t1 (wb__)    2.742    0.062   43.993    0.000    2.761    2.761
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.440
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.021
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.336
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.425
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.020
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.326

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.345    0.057    6.039    0.000    1.000    1.000
    swls_t1 (wb__)    0.986    0.075   13.185    0.000    1.000    1.000
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.296
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.399
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.264
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.480
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.272
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.372
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.242
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.451


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.982    0.815
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.869    0.739
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.019    0.851
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.892    0.706
  swls_t2 =~                                                            
    s06_01_           1.000                               0.958    0.809
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.848    0.731
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    0.994    0.845
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.871    0.697
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.745    0.745

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               1.025    1.025

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_b)   -0.278    0.058   -4.758    0.000   -0.397   -0.397
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.132    0.044    2.974    0.003    0.132    0.272
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.297    0.057    5.231    0.000    0.297    0.474
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.068    0.043    1.582    0.114    0.068    0.173
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.320    0.066    4.823    0.000    0.320    0.400

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.296    0.048    6.155    0.000    0.415    0.415
    swls_t1 (wb__)    2.629    0.063   41.512    0.000    2.679    2.679
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.453
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.089
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.339
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.459
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.090
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.344

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.509    0.082    6.182    0.000    1.000    1.000
    swls_t1 (wb__)    0.963    0.075   12.868    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.335
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.454
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.276
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.501
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.346
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.466
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.286
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.514
6.8.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 9552.9 9688.3 49.776                              
lcs_meaning_group_weak   26 9550.4 9676.8 51.287     1.5699       2     0.4561
lcs_meaning_group_strong 30 9543.8 9652.0 52.632     1.3465       4     0.8534
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int_a 0.196 0.321 4.679 0
d_meaning_1 ~1 d_int_b 0.230 0.319 4.855 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int 0.211 0.344 6.659 0
d_meaning_1 ~1 d_int 0.211 0.292 6.659 0

Slightly more positive change in meaning in life in the Self-Improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                51.287      46.282
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.002       0.008
  Scaling correction factor                                  1.108
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             29.436      26.563
    Self-Improvement                            21.851      19.719

Model Test Baseline Model:

  Test statistic                              2949.985    2233.784
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.321

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.991       0.991
  Tucker-Lewis Index (TLI)                       0.990       0.989
                                                                  
  Robust Comparative Fit Index (CFI)                         0.992
  Robust Tucker-Lewis Index (TLI)                            0.990

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4747.211   -4747.211
  Scaling correction factor                                  0.749
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4721.568   -4721.568
  Scaling correction factor                                  1.144
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9550.422    9550.422
  Bayesian (BIC)                              9676.751    9676.751
  Sample-size adjusted Bayesian (SABIC)       9587.848    9587.848

Root Mean Square Error of Approximation:

  RMSEA                                          0.054       0.048
  90 Percent confidence interval - lower         0.032       0.026
  90 Percent confidence interval - upper         0.075       0.069
  P-value H_0: RMSEA <= 0.050                    0.361       0.529
  P-value H_0: RMSEA >= 0.080                    0.021       0.005
                                                                  
  Robust RMSEA                                               0.055
  90 Percent confidence interval - lower                     0.028
  90 Percent confidence interval - upper                     0.080
  P-value H_0: Robust RMSEA <= 0.050                         0.351
  P-value H_0: Robust RMSEA >= 0.080                         0.047

Standardized Root Mean Square Residual:

  SRMR                                           0.033       0.033

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               1.002    0.814
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.204    0.929
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.170    0.885
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.802
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.923
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.877
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.638    0.638

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               1.045    1.045

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_a)     -0.230    0.048   -4.744    0.000   -0.375   -0.375
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.207    0.043    4.842    0.000    0.207    0.406
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)      0.027    0.033    0.830    0.407    0.027    0.118
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.153    0.038    4.081    0.000    0.153    0.406

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.196    0.042    4.679    0.000    0.321    0.321
    mnng_t1 (wb__)    3.210    0.064   50.291    0.000    3.204    3.204
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.037
   .mnn_3_1  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.088
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.038
   .mnn_3_2  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.091

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.374    0.067    5.571    0.000    1.000    1.000
    mnng_t1 (wb__)    1.004    0.096   10.450    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.510    0.040   12.813    0.000    0.510    0.337
   .mnn_2_1 (res2)    0.230    0.035    6.582    0.000    0.230    0.137
   .mnn_3_1 (res3)    0.377    0.038    9.898    0.000    0.377    0.216
   .mnn_1_2 (res1)    0.510    0.040   12.813    0.000    0.510    0.357
   .mnn_2_2 (res2)    0.230    0.035    6.582    0.000    0.230    0.148
   .mnn_3_2 (res3)    0.377    0.038    9.898    0.000    0.377    0.232


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.951    0.786
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.142    0.902
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.110    0.854
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.788
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.903
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.856
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.753    0.753

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.992    0.992

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_b)     -0.254    0.055   -4.640    0.000   -0.369   -0.369
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.281    0.044    6.434    0.000    0.281    0.502
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)      0.076    0.040    1.920    0.055    0.076    0.253
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.137    0.048    2.881    0.004    0.137    0.300

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.230    0.047    4.855    0.000    0.319    0.319
    mnng_t1 (wb__)    3.206    0.060   53.091    0.000    3.371    3.371
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_1  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_2  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.521    0.076    6.834    0.000    1.000    1.000
    mnng_t1 (wb__)    0.904    0.085   10.690    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.382
   .mnn_2_1 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.187
   .mnn_3_1 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.271
   .mnn_1_2 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.379
   .mnn_2_2 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.185
   .mnn_3_2 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.268
6.8.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 7216.5 7351.9 16.395                              
lcs_selfes_group_weak   26 7213.2 7339.6 17.124    0.76343       2     0.6827
lcs_selfes_group_strong 30 7208.1 7316.4 19.974    2.84132       4     0.5847
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int_a 0.240 0.523 7.667 0
d_selfes_1 ~1 d_int_b 0.287 0.570 8.640 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int 0.264 0.574 11.621 0
d_selfes_1 ~1 d_int 0.264 0.524 11.621 0

Slightly more positive change in self-esteem in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 72 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                17.124      16.149
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.905       0.933
  Scaling correction factor                                  1.060
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             11.170      10.534
    Self-Improvement                             5.954       5.615

Model Test Baseline Model:

  Test statistic                              3063.748    2410.188
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.271

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.003       1.005
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.004

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3578.624   -3578.624
  Scaling correction factor                                  0.727
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3570.062   -3570.062
  Scaling correction factor                                  1.103
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7213.249    7213.249
  Bayesian (BIC)                              7339.578    7339.578
  Sample-size adjusted Bayesian (SABIC)       7250.675    7250.675

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.018       0.010
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.014
  P-value H_0: Robust RMSEA <= 0.050                         0.999
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.024       0.024

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.733    0.858
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.815    0.797
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.913    0.954
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.747    0.862
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.831    0.802
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.930    0.956
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.615    0.615

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               0.982    0.982

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_a)    -0.095    0.023   -4.114    0.000   -0.283   -0.283
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.076    0.016    4.662    0.000    0.076    0.394
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.176    0.031    5.584    0.000    0.176    0.459
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)    -0.035    0.017   -2.100    0.036   -0.035   -0.432

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.240    0.031    7.667    0.000    0.523    0.523
    slfs_t1 (wb__)    3.531    0.046   76.740    0.000    4.815    4.815
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.173
   .slf_3_1  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.233
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.159
   .slf_3_2  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.212

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.211    0.033    6.426    0.000    1.000    1.000
    slfs_t1 (wb__)    0.538    0.044   12.136    0.000    1.000    1.000
   .slf_1_1 (res1)    0.192    0.017   11.333    0.000    0.192    0.263
   .slf_2_1 (res2)    0.382    0.032   11.934    0.000    0.382    0.365
   .slf_3_1 (res3)    0.082    0.017    4.799    0.000    0.082    0.089
   .slf_1_2 (res1)    0.192    0.017   11.333    0.000    0.192    0.256
   .slf_2_2 (res2)    0.382    0.032   11.934    0.000    0.382    0.357
   .slf_3_2 (res3)    0.082    0.017    4.799    0.000    0.082    0.086


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.757    0.880
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.841    0.807
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.942    0.929
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.686    0.859
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.763    0.778
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.855    0.916
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.734    0.734

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               1.103    1.103

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_b)    -0.178    0.028   -6.327    0.000   -0.466   -0.466
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.065    0.016    4.023    0.000    0.065    0.388
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.137    0.027    5.051    0.000    0.137    0.359
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.034    0.024    1.433    0.152    0.034    0.246

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.287    0.033    8.640    0.000    0.570    0.570
    slfs_t1 (wb__)    3.548    0.045   78.100    0.000    4.689    4.689
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.203
   .slf_3_1  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.168
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.280
   .slf_3_2  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.270

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.254    0.036    6.949    0.000    1.000    1.000
    slfs_t1 (wb__)    0.573    0.044   12.915    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.226
   .slf_2_1 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.350
   .slf_3_1 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.136
   .slf_1_2 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.262
   .slf_2_2 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.395
   .slf_3_2 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.161
6.8.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 7424.3 7559.7 31.207                              
lcs_concept_group_weak   26 7420.6 7546.9 31.474    0.26259       2     0.8770
lcs_concept_group_strong 30 7413.2 7521.5 32.099    0.62600       4     0.9601
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int_a 0.168 0.336 5.123 0
d_concept_1 ~1 d_int_b 0.185 0.374 5.700 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int 0.177 0.353 7.62 0
d_concept_1 ~1 d_int 0.177 0.358 7.62 0

Slightly more positive change in self-concept clarity in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 62 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                31.474      28.712
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.211       0.324
  Scaling correction factor                                  1.096
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             17.734      16.178
    Self-Improvement                            13.740      12.534

Model Test Baseline Model:

  Test statistic                              2887.162    2162.733
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.335

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.998       0.999
  Tucker-Lewis Index (TLI)                       0.998       0.999
                                                                  
  Robust Comparative Fit Index (CFI)                         0.999
  Robust Tucker-Lewis Index (TLI)                            0.999

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3682.288   -3682.288
  Scaling correction factor                                  0.726
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3666.551   -3666.551
  Scaling correction factor                                  1.119
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7420.576    7420.576
  Bayesian (BIC)                              7546.905    7546.905
  Sample-size adjusted Bayesian (SABIC)       7458.003    7458.003

Root Mean Square Error of Approximation:

  RMSEA                                          0.025       0.018
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.052       0.047
  P-value H_0: RMSEA <= 0.050                    0.932       0.971
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.020
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.053
  P-value H_0: Robust RMSEA <= 0.050                         0.925
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.022       0.022

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.650    0.794
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.834    0.869
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.919    0.924
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.663    0.800
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.851    0.873
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.938    0.927
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.756    0.756

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.980    0.980

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_a)     -0.117    0.025   -4.763    0.000   -0.359   -0.359
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.070    0.020    3.400    0.001    0.070    0.281
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.086    0.021    4.072    0.000    0.086    0.380
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.028    0.022    1.296    0.195    0.028    0.194

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.168    0.033    5.123    0.000    0.336    0.336
    cncpt_1 (wb__)    3.050    0.042   72.638    0.000    4.692    4.692
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.970
   .cnc_3_1  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.384
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.955
   .cnc_3_2  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.361

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.252    0.034    7.500    0.000    1.000    1.000
    cncpt_1 (wb__)    0.423    0.036   11.577    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.248    0.020   12.590    0.000    0.248    0.370
   .cnc_2_1 (res2)    0.227    0.020   11.576    0.000    0.227    0.246
   .cnc_3_1 (res3)    0.144    0.023    6.215    0.000    0.144    0.146
   .cnc_1_2 (res1)    0.248    0.020   12.590    0.000    0.248    0.361
   .cnc_2_2 (res2)    0.227    0.020   11.576    0.000    0.227    0.238
   .cnc_3_2 (res3)    0.144    0.023    6.215    0.000    0.144    0.141


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.700    0.802
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.899    0.895
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.990    0.919
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.661    0.785
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.848    0.885
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.934    0.910
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.750    0.750

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               1.060    1.060

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_b)     -0.150    0.024   -6.142    0.000   -0.432   -0.432
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.072    0.020    3.556    0.000    0.072    0.263
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.063    0.020    3.196    0.001    0.063    0.315
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.037    0.021    1.798    0.072    0.037    0.207

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.185    0.033    5.700    0.000    0.374    0.374
    cncpt_1 (wb__)    3.038    0.045   67.515    0.000    4.337    4.337
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.896
   .cnc_3_1  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.265
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.939
   .cnc_3_2  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.328

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.245    0.037    6.571    0.000    1.000    1.000
    cncpt_1 (wb__)    0.490    0.039   12.493    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.357
   .cnc_2_1 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.198
   .cnc_3_1 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.156
   .cnc_1_2 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.385
   .cnc_2_2 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.217
   .cnc_3_2 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.172

6.8.2 Current- and ideal-self personality differences across groups

Profile correlations by group and measurement occasion (mixed effects models) - results:

df_sbsa2_t1t2 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa2_t1t2$profile_corr_item_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 335 0.42 0.49   0.37    0.38 0.43 -1.09 3.39  4.48 1.14     4.25 0.03
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 336 0.42 0.49   0.39     0.4 0.51 -0.89 2.33  3.22 0.47     0.36 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean  sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.55 0.5   0.52    0.53 0.48 -1.07 2.17  3.23 0.36      0.5 0.03
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 291 0.56 0.48   0.54    0.55 0.56 -0.62 1.83  2.45 0.19    -0.53 0.03
psych::describeBy(df_sbsa2_t1t2$profile_corr_facet_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 335 0.35 0.65   0.27    0.31 0.6 -1.07 3.77  4.84 0.93     2.14 0.04
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 337 0.34 0.67   0.29    0.31 0.7 -1.23 2.53  3.75 0.46     0.04 0.04
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.51 0.67   0.46    0.48 0.66 -1.34 3.09  4.43 0.42     0.32 0.04
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 292 0.53 0.66   0.49     0.5 0.69 -1.08 2.51   3.6 0.32    -0.32 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.418 0.027 845.076 15.580 0.000
Item-level profile corr. time 0.129 0.021 592.195 6.065 0.000
Item-level profile corr. group 0.000 0.038 845.887 -0.012 0.990
Item-level profile corr. time*group 0.007 0.030 591.350 0.242 0.809
Facet-level profile corr. Intercept 0.350 0.036 846.010 9.723 0.000
Facet-level profile corr. time 0.164 0.028 595.605 5.783 0.000
Facet-level profile corr. group -0.008 0.051 846.005 -0.151 0.880
Facet-level profile corr. time*group 0.010 0.040 594.236 0.259 0.796

Squared trait-/facet-differences by group and measurement occasion (mixed effects models) - results:

mod_traits_sqdiff_groups <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 1.753 0.108 768.868 16.160 0.000
extraversion time -0.308 0.083 575.000 -3.693 0.000
extraversion group 0.172 0.152 768.868 1.128 0.259
extraversion time*group -0.126 0.117 575.000 -1.075 0.283
agreeableness Intercept 0.507 0.048 794.537 10.552 0.000
agreeableness time -0.078 0.039 574.000 -1.999 0.046
agreeableness group -0.032 0.067 794.537 -0.477 0.633
agreeableness time*group -0.037 0.055 574.000 -0.678 0.498
conscientiousness Intercept 1.661 0.113 752.187 14.681 0.000
conscientiousness time -0.139 0.084 575.000 -1.662 0.097
conscientiousness group -0.067 0.159 752.187 -0.421 0.674
conscientiousness time*group -0.060 0.117 575.000 -0.510 0.610
neuroticism Intercept 3.363 0.189 766.422 17.764 0.000
neuroticism time -0.636 0.145 575.000 -4.390 0.000
neuroticism group -0.018 0.266 766.422 -0.068 0.946
neuroticism time*group -0.121 0.203 575.000 -0.594 0.553
openness Intercept 0.464 0.048 823.546 9.580 0.000
openness time -0.054 0.042 573.000 -1.288 0.198
openness group 0.002 0.068 823.546 0.029 0.977
openness time*group -0.043 0.059 573.000 -0.738 0.461
sociability Intercept 2.989 0.179 797.073 16.696 0.000
sociability time -0.870 0.147 573.000 -5.907 0.000
sociability group -0.016 0.251 797.073 -0.066 0.948
sociability time*group 0.173 0.207 573.000 0.835 0.404
assertiveness Intercept 1.601 0.130 819.490 12.291 0.000
assertiveness time -0.116 0.112 572.000 -1.034 0.302
assertiveness group 0.304 0.183 819.490 1.663 0.097
assertiveness time*group -0.243 0.157 572.000 -1.540 0.124
energy Intercept 1.976 0.145 870.043 13.607 0.000
energy time -0.244 0.135 574.000 -1.803 0.072
energy group 0.127 0.204 870.043 0.624 0.533
energy time*group -0.182 0.190 574.000 -0.959 0.338
compassion Intercept 0.476 0.059 938.372 8.086 0.000
compassion time -0.053 0.060 574.000 -0.870 0.385
compassion group 0.139 0.083 938.372 1.684 0.093
compassion time*group -0.128 0.085 574.000 -1.511 0.131
respectfulness Intercept 0.520 0.061 825.639 8.474 0.000
respectfulness time 0.007 0.054 571.000 0.130 0.897
respectfulness group -0.025 0.086 825.639 -0.290 0.772
respectfulness time*group -0.038 0.075 571.000 -0.499 0.618
trust Intercept 1.239 0.094 934.116 13.146 0.000
trust time -0.309 0.096 573.000 -3.204 0.001
trust group -0.123 0.133 934.116 -0.930 0.353
trust time*group -0.039 0.136 573.000 -0.289 0.773
organization Intercept 1.852 0.146 796.417 12.680 0.000
organization time -0.143 0.120 574.000 -1.199 0.231
organization group -0.165 0.205 796.417 -0.806 0.421
organization time*group -0.011 0.168 574.000 -0.066 0.947
productiveness Intercept 2.834 0.171 802.138 16.604 0.000
productiveness time -0.355 0.143 571.000 -2.488 0.013
productiveness group 0.018 0.240 802.138 0.074 0.941
productiveness time*group -0.194 0.200 571.000 -0.966 0.335
responsibility Intercept 1.284 0.117 792.347 10.981 0.000
responsibility time -0.048 0.096 572.000 -0.499 0.618
responsibility group 0.060 0.164 792.347 0.364 0.716
responsibility time*group -0.179 0.134 572.000 -1.337 0.182
anxiety Intercept 4.276 0.252 810.764 17.001 0.000
anxiety time -0.620 0.211 575.000 -2.934 0.003
anxiety group 0.051 0.353 810.764 0.144 0.886
anxiety time*group -0.119 0.297 575.000 -0.401 0.689
depression Intercept 3.968 0.220 759.626 18.006 0.000
depression time -0.894 0.167 573.000 -5.356 0.000
depression group -0.076 0.310 759.626 -0.246 0.805
depression time*group 0.013 0.235 573.000 0.056 0.955
volatility Intercept 2.821 0.199 851.931 14.187 0.000
volatility time -0.464 0.180 575.000 -2.580 0.010
volatility group 0.041 0.279 851.931 0.149 0.882
volatility time*group -0.275 0.252 575.000 -1.088 0.277
curiosity Intercept 0.558 0.065 870.775 8.598 0.000
curiosity time -0.087 0.061 572.000 -1.431 0.153
curiosity group -0.003 0.091 870.775 -0.038 0.970
curiosity time*group 0.084 0.085 572.000 0.985 0.325
aesthetic Intercept 0.440 0.054 934.046 8.107 0.000
aesthetic time -0.045 0.056 571.000 -0.804 0.422
aesthetic group 0.011 0.076 934.046 0.150 0.880
aesthetic time*group -0.017 0.078 571.000 -0.211 0.833
imagination Intercept 1.173 0.108 781.107 10.813 0.000
imagination time -0.201 0.086 573.000 -2.333 0.020
imagination group 0.006 0.152 781.107 0.037 0.971
imagination time*group -0.027 0.121 573.000 -0.227 0.821

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1) or of interaction effects of group by measurement occasion (at T2).

6.8.3 Latent change: differences in personality change

6.8.3.1 Run models

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_main_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_main_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_main_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current")), trait_main_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal")), trait_main_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current")), trait_main_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal")), trait_main_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current")), trait_main_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal")), trait_main_fit_strong_ideal))
}
6.8.3.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current, fit_lcs_extra_main_weak_current, fit_lcs_extra_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current 24 7146.6 7282.0 53.117                   
fit_lcs_extra_main_weak_current   26 7143.3 7269.6 53.765    0.62163       2
fit_lcs_extra_main_strong_current 30 7137.3 7245.6 55.770    2.00804       4
                                  Pr(>Chisq)
fit_lcs_extra_main_config_current           
fit_lcs_extra_main_weak_current       0.7328
fit_lcs_extra_main_strong_current     0.7343
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_current <- broom::tidy(fit_lcs_extra_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.091 0.345 4.059 0
d_extra_1 ~1 d_int_b 0.090 0.322 3.653 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.09 0.340 5.195 0
d_extra_1 ~1 d_int 0.09 0.321 5.195 0
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7143.252 7269.622 0.988 0.056 0.032

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current, fit_lcs_agree_main_weak_current, fit_lcs_agree_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current 24 5825.7 5961.1 19.373                   
fit_lcs_agree_main_weak_current   26 5822.4 5948.8 20.038    0.64885       2
fit_lcs_agree_main_strong_current 30 5815.3 5923.6 20.936    0.88490       4
                                  Pr(>Chisq)
fit_lcs_agree_main_config_current           
fit_lcs_agree_main_weak_current       0.7229
fit_lcs_agree_main_strong_current     0.9267
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_current <- broom::tidy(fit_lcs_agree_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.027 0.130 1.481 0.139
d_agree_1 ~1 d_int_b 0.020 0.098 1.103 0.270
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.023 0.109 1.774 0.076
d_agree_1 ~1 d_int 0.023 0.114 1.774 0.076
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5822.398 5948.768 1 0 0.03

No change in agreeableness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current, fit_lcs_consc_main_weak_current, fit_lcs_consc_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current 24 6334.0 6469.4 27.962                   
fit_lcs_consc_main_weak_current   26 6333.8 6460.2 31.801     4.1607       2
fit_lcs_consc_main_strong_current 30 6332.5 6440.8 38.436     6.5293       4
                                  Pr(>Chisq)
fit_lcs_consc_main_config_current           
fit_lcs_consc_main_weak_current       0.1249
fit_lcs_consc_main_strong_current     0.1630
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_current <- broom::tidy(fit_lcs_consc_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.076 0.211 2.849 0.004
d_consc_1 ~1 d_int_b 0.101 0.252 3.582 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.088 0.243 4.466 0
d_consc_1 ~1 d_int 0.088 0.220 4.466 0
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6333.835 6460.205 0.998 0.026 0.025

Similar change in conscientiousness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

Neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current, fit_lcs_neuro_main_weak_current, fit_lcs_neuro_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC  BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current 24 6778.6 6914 22.183                   
fit_lcs_neuro_main_weak_current   26 6775.6 6902 23.190     1.1350       2
fit_lcs_neuro_main_strong_current 30 6769.7 6878 25.319     2.1364       4
                                  Pr(>Chisq)
fit_lcs_neuro_main_config_current           
fit_lcs_neuro_main_weak_current       0.5669
fit_lcs_neuro_main_strong_current     0.7107
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.177 -0.474 -6.345 0
d_neuro_1 ~1 d_int_b -0.179 -0.390 -5.609 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.178 -0.474 -8.438 0
d_neuro_1 ~1 d_int -0.178 -0.386 -8.438 0
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6775.592 6901.962 1 0 0.021

Similar change in neuroticism in both groups (decrease is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current, fit_lcs_openn_main_weak_current, fit_lcs_openn_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current 24 6192.9 6328.3 22.020                   
fit_lcs_openn_main_weak_current   26 6196.1 6322.4 29.146     6.6790       2
fit_lcs_openn_main_strong_current 30 6196.0 6304.3 37.047     7.9676       4
                                  Pr(>Chisq)  
fit_lcs_openn_main_config_current             
fit_lcs_openn_main_weak_current      0.03546 *
fit_lcs_openn_main_strong_current    0.09277 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_current <- broom::tidy(fit_lcs_openn_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.076 0.314 3.416 0.001
d_openn_1 ~1 d_int_b 0.077 0.295 3.243 0.001
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.077 0.316 4.69 0
d_openn_1 ~1 d_int 0.077 0.294 4.69 0
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6196.066 6322.436 0.999 0.019 0.036

Similar (quite small) change in openness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

6.8.3.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal, fit_lcs_extra_main_weak_ideal, fit_lcs_extra_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal 24 6118.2 6253.6 34.532                   
fit_lcs_extra_main_weak_ideal   26 6116.0 6242.3 36.296     1.5068       2
fit_lcs_extra_main_strong_ideal 30 6109.0 6217.4 37.365     1.0521       4
                                Pr(>Chisq)
fit_lcs_extra_main_config_ideal           
fit_lcs_extra_main_weak_ideal       0.4708
fit_lcs_extra_main_strong_ideal     0.9018
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.018 -0.071 -0.748 0.454
d_extra_1 ~1 d_int_b -0.022 -0.086 -0.939 0.348
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.02 -0.079 -1.204 0.229
d_extra_1 ~1 d_int -0.02 -0.078 -1.204 0.229
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6115.965 6242.335 0.99 0.034 0.043

Slight decrease in extraversion that is n.s. and slightly more pronounced in the self-acceptance group.

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal, fit_lcs_agree_main_weak_ideal, fit_lcs_agree_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal 24 5819.9 5955.3 32.897                   
fit_lcs_agree_main_weak_ideal   26 5816.2 5942.5 33.204    0.30674       2
fit_lcs_agree_main_strong_ideal 30 5810.7 5919.0 35.765    2.51578       4
                                Pr(>Chisq)
fit_lcs_agree_main_config_ideal           
fit_lcs_agree_main_weak_ideal       0.8578
fit_lcs_agree_main_strong_ideal     0.6418
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.007 0.023 0.292 0.771
d_agree_1 ~1 d_int_b -0.030 -0.112 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.012 -0.044 -0.793 0.428
d_agree_1 ~1 d_int -0.012 -0.047 -0.793 0.428
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5816.169 5942.539 0.995 0.029 0.03

Almost no change in agreeableness in both groups (n.s.). Slight decrease in self-acceptance group. No significant differences according to the LRTs.

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal, fit_lcs_consc_main_weak_ideal, fit_lcs_consc_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal 24 5019.9 5155.3 23.423                   
fit_lcs_consc_main_weak_ideal   26 5016.1 5142.5 23.669    0.21133       2
fit_lcs_consc_main_strong_ideal 30 5010.0 5118.3 25.547    1.86945       4
                                Pr(>Chisq)
fit_lcs_consc_main_config_ideal           
fit_lcs_consc_main_weak_ideal       0.8997
fit_lcs_consc_main_strong_ideal     0.7598
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.027 0.086 1.162 0.245
d_consc_1 ~1 d_int_b 0.010 0.036 0.441 0.659
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.018 0.057 1.118 0.264
d_consc_1 ~1 d_int 0.018 0.066 1.118 0.264
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5016.132 5142.502 1 0 0.026

Almost no change in conscientiousness in both groups (n.s.). Increase is slightly less pronounced in self-acceptance group. No significant differences according to the LRTs.

Neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal, fit_lcs_neuro_main_weak_ideal, fit_lcs_neuro_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal 24 5249.5 5384.9 27.220                   
fit_lcs_neuro_main_weak_ideal   26 5251.1 5377.5 32.857     4.4468       2
fit_lcs_neuro_main_strong_ideal 30 5245.2 5353.5 34.896     2.0381       4
                                Pr(>Chisq)
fit_lcs_neuro_main_config_ideal           
fit_lcs_neuro_main_weak_ideal       0.1082
fit_lcs_neuro_main_strong_ideal     0.7288
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.003 -0.010 -0.126 0.900
d_neuro_1 ~1 d_int_b 0.043 0.116 1.552 0.121
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.02 0.058 0.999 0.318
d_neuro_1 ~1 d_int 0.02 0.052 0.999 0.318
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5251.121 5377.491 0.996 0.028 0.038

Very similar change in neuroticism in both groups (slight decrease in self-improvement group). No significant differences according to the LRTs.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal, fit_lcs_openn_main_weak_ideal, fit_lcs_openn_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal 24 5955.9 6091.3 45.711                   
fit_lcs_openn_main_weak_ideal   26 5952.8 6079.2 46.574     0.7624       2
fit_lcs_openn_main_strong_ideal 30 5948.8 6057.1 50.566     4.0761       4
                                Pr(>Chisq)
fit_lcs_openn_main_config_ideal           
fit_lcs_openn_main_weak_ideal       0.6831
fit_lcs_openn_main_strong_ideal     0.3958
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.015 0.071 0.924 0.356
d_openn_1 ~1 d_int_b 0.016 0.112 1.143 0.253
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.016 0.074 1.478 0.139
d_openn_1 ~1 d_int 0.016 0.109 1.478 0.139
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5952.794 6079.164 0.985 0.048 0.038

Similar change in ideal-self openness in both groups (slight decrease in self-improvement group). No significant differences according to the LRTs.

6.8.3.4 Summary of latent main effects
params_main_summary <- bind_rows(
  params_main_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "accept", "improve"))

kable(params_main_summary, digits = 3)
trait self group beta p.value sig_diff
extraversion current accept 0.345 0.000
extraversion current improve 0.322 0.000
extraversion ideal accept -0.071 0.454
extraversion ideal improve -0.086 0.348
agreeableness current accept 0.130 0.139
agreeableness current improve 0.098 0.270
agreeableness ideal accept 0.023 0.771
agreeableness ideal improve -0.112 0.175
conscientiousness current accept 0.211 0.004
conscientiousness current improve 0.252 0.000
conscientiousness ideal accept 0.086 0.245
conscientiousness ideal improve 0.036 0.659
neuroticism current accept -0.474 0.000
neuroticism current improve -0.390 0.000
neuroticism ideal accept -0.010 0.900
neuroticism ideal improve 0.116 0.121
openness current accept 0.314 0.001
openness current improve 0.295 0.001
openness ideal accept 0.071 0.356
openness ideal improve 0.112 0.253

6.8.4 Latent change: intervention groups vs. control group

6.8.4.1 Run models

After seeing that the two intervention groups do not differ substantially, we want to test the control group vs. the two intervention groups (all from T1 to T2).

# new data frame
df_sbsa2_wide_pers_int_cg <- df_sbsa2_wide_pers %>% 
  mutate(group_cg = ifelse(rando=="Waitlist-Control", "Control", "Intervention"))

df_sbsa2_wide_pers_int_cg %>% group_by(group_cg) %>% tally()
# A tibble: 2 × 2
  group_cg         n
  <chr>        <int>
1 Control        175
2 Intervention   674

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates: -> same templates as above, we're only setting up a different group comparison!

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current_cg <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current_cg <- lavaan(template_filled_config_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current_cg")), template_filled_config_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current_cg")), trait_main_fit_config_current_cg))
  # configural - ideal
  template_filled_config_ideal_cg <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal_cg <- lavaan(template_filled_config_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal_cg")), template_filled_config_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal_cg")), trait_main_fit_config_ideal_cg))
  # weak - current
  template_filled_weak_current_cg <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current_cg <- lavaan(template_filled_weak_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current_cg")), template_filled_weak_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current_cg")), trait_main_fit_weak_current_cg))
  # weak - ideal
  template_filled_weak_ideal_cg <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal_cg <- lavaan(template_filled_weak_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal_cg")), template_filled_weak_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal_cg")), trait_main_fit_weak_ideal_cg))
  # strong - current
  template_filled_strong_current_cg <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current_cg <- lavaan(template_filled_strong_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current_cg")), template_filled_strong_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current_cg")), trait_main_fit_strong_current_cg))
  # strong - ideal
  template_filled_strong_ideal_cg <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal_cg <- lavaan(template_filled_strong_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal_cg")), template_filled_strong_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal_cg")), trait_main_fit_strong_ideal_cg))
}

Control group comes first in the multigroup SEM:
a = waitlist control group (N = 175), b = both intervention groups (N = 674)

6.8.4.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current_cg, fit_lcs_extra_main_weak_current_cg, fit_lcs_extra_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current_cg 24 8961.3 9103.6 61.348                   
fit_lcs_extra_main_weak_current_cg   26 8958.1 9091.0 62.158    0.78754       2
fit_lcs_extra_main_strong_current_cg 30 8952.0 9065.8 64.005    1.86667       4
                                     Pr(>Chisq)
fit_lcs_extra_main_config_current_cg           
fit_lcs_extra_main_weak_current_cg       0.6745
fit_lcs_extra_main_strong_current_cg     0.7603
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_extra_current_cg <- broom::tidy(fit_lcs_extra_main_weak_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.067 0.249 2.114 0.035
d_extra_1 ~1 d_int_b 0.093 0.335 5.377 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.088 0.325 5.621 0
d_extra_1 ~1 d_int 0.088 0.316 5.621 0
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 8958.13 9090.964 0.988 0.057 0.034

No significant differences according to the LRTs but slight difference visible (stronger increase in intervention groups). Latent change score only significant (at p < .001) in the intervention groups.

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current_cg, fit_lcs_agree_main_weak_current_cg, fit_lcs_agree_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current_cg 24 7366.5 7508.9 20.132                   
fit_lcs_agree_main_weak_current_cg   26 7363.4 7496.3 21.048    0.84014       2
fit_lcs_agree_main_strong_current_cg 30 7358.6 7472.5 24.196    3.16073       4
                                     Pr(>Chisq)
fit_lcs_agree_main_config_current_cg           
fit_lcs_agree_main_weak_current_cg       0.6570
fit_lcs_agree_main_strong_current_cg     0.5313
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_agree_current_cg <- broom::tidy(fit_lcs_agree_main_weak_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.060 0.357 2.669 0.008
d_agree_1 ~1 d_int_b 0.022 0.112 1.814 0.070
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.03 0.177 2.765 0.006
d_agree_1 ~1 d_int 0.03 0.153 2.765 0.006
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7363.448 7496.282 1 0 0.022

No change in agreeableness in both groups (at p < .001). Effect is even slightly larger in control group. No significant differences according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current_cg, fit_lcs_consc_main_weak_current_cg, fit_lcs_consc_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current_cg 24 7918.3 8060.6 43.856                   
fit_lcs_consc_main_weak_current_cg   26 7916.0 8048.9 45.611     1.6745       2
fit_lcs_consc_main_strong_current_cg 30 7908.4 8022.3 45.965     0.3538       4
                                     Pr(>Chisq)
fit_lcs_consc_main_config_current_cg           
fit_lcs_consc_main_weak_current_cg       0.4329
fit_lcs_consc_main_strong_current_cg     0.9861
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_consc_current_cg <- broom::tidy(fit_lcs_consc_main_weak_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.100 0.256 2.580 0.01
d_consc_1 ~1 d_int_b 0.089 0.232 4.549 0.00
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.091 0.233 5.228 0
d_consc_1 ~1 d_int 0.091 0.238 5.228 0
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7916.049 8048.882 0.995 0.042 0.017

Similar change in conscientiousness in both groups (increase is, however, not significant in the control group at p < .001). No significant differences according to the LRTs.

Neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current_cg, fit_lcs_neuro_main_weak_current_cg, fit_lcs_neuro_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current_cg 24 8492.1 8634.4 20.359                   
fit_lcs_neuro_main_weak_current_cg   26 8488.3 8621.1 20.541     0.2174       2
fit_lcs_neuro_main_strong_current_cg 30 8484.3 8598.1 24.562     4.0126       4
                                     Pr(>Chisq)
fit_lcs_neuro_main_config_current_cg           
fit_lcs_neuro_main_weak_current_cg       0.8970
fit_lcs_neuro_main_strong_current_cg     0.4043
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_neuro_current_cg <- broom::tidy(fit_lcs_neuro_main_weak_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.132 -0.314 -3.112 0.002
d_neuro_1 ~1 d_int_b -0.177 -0.421 -8.294 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.169 -0.399 -8.783 0
d_neuro_1 ~1 d_int -0.169 -0.402 -8.783 0
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 8488.251 8621.085 1 0 0.015

No significant differences according to the LRTs but slight difference visible (stronger neuroticism decrease in intervention groups). Latent change score only significant (at p < .001) in the intervention groups.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current_cg, fit_lcs_openn_main_weak_current_cg, fit_lcs_openn_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current_cg 24 7709.2 7851.5 20.211                   
fit_lcs_openn_main_weak_current_cg   26 7706.1 7838.9 21.083     0.8479       2
fit_lcs_openn_main_strong_current_cg 30 7702.8 7816.7 25.861     4.6250       4
                                     Pr(>Chisq)
fit_lcs_openn_main_config_current_cg           
fit_lcs_openn_main_weak_current_cg       0.6545
fit_lcs_openn_main_strong_current_cg     0.3280
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_openn_current_cg <- broom::tidy(fit_lcs_openn_main_weak_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_current_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.020 0.070 0.611 0.541
d_openn_1 ~1 d_int_b 0.077 0.304 4.685 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.066 0.226 4.435 0
d_openn_1 ~1 d_int 0.066 0.259 4.435 0
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7706.065 7838.899 1 0 0.018

No significant differences according to the LRTs but difference visible, with stronger openness increase in intervention groups. Latent change score only significant in the intervention groups.

6.8.4.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal_cg, fit_lcs_extra_main_weak_ideal_cg, fit_lcs_extra_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal_cg 24 7787.2 7929.5 34.170                   
fit_lcs_extra_main_weak_ideal_cg   26 7788.7 7921.5 39.678     4.0600       2
fit_lcs_extra_main_strong_ideal_cg 30 7782.6 7896.5 41.587     1.8754       4
                                   Pr(>Chisq)
fit_lcs_extra_main_config_ideal_cg           
fit_lcs_extra_main_weak_ideal_cg       0.1313
fit_lcs_extra_main_strong_ideal_cg     0.7587
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_extra_ideal_cg <- broom::tidy(fit_lcs_extra_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_ideal_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.006 -0.023 -0.179 0.858
d_extra_1 ~1 d_int_b -0.019 -0.080 -1.221 0.222
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.016 -0.067 -1.157 0.247
d_extra_1 ~1 d_int -0.016 -0.068 -1.157 0.247
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7788.687 7921.521 0.99 0.035 0.035

Slight decrease in extraversion that is n.s. and slightly more pronounced in the intervention groups. No significant differences according to the LRTs.

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal_cg, fit_lcs_agree_main_weak_ideal_cg, fit_lcs_agree_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal_cg 24 7349.7 7492.0 32.746                   
fit_lcs_agree_main_weak_ideal_cg   26 7350.6 7483.4 37.683     4.4495       2
fit_lcs_agree_main_strong_ideal_cg 30 7343.8 7457.7 38.908     1.1770       4
                                   Pr(>Chisq)
fit_lcs_agree_main_config_ideal_cg           
fit_lcs_agree_main_weak_ideal_cg       0.1081
fit_lcs_agree_main_strong_ideal_cg     0.8819
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_agree_ideal_cg <- broom::tidy(fit_lcs_agree_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a -0.015 -0.046 -0.434 0.664
d_agree_1 ~1 d_int_b -0.011 -0.041 -0.718 0.473
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.012 -0.037 -0.829 0.407
d_agree_1 ~1 d_int -0.012 -0.043 -0.829 0.407
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7350.615 7483.449 0.994 0.033 0.03

Almost no change in agreeableness in both groups (n.s.). No significant differences according to the LRTs.

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal_cg, fit_lcs_consc_main_weak_ideal_cg, fit_lcs_consc_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal_cg 24 6279.8 6422.1 18.930                   
fit_lcs_consc_main_weak_ideal_cg   26 6277.6 6410.5 20.817      1.641       2
fit_lcs_consc_main_strong_ideal_cg 30 6272.0 6385.9 23.213      2.413       4
                                   Pr(>Chisq)
fit_lcs_consc_main_config_ideal_cg           
fit_lcs_consc_main_weak_ideal_cg       0.4402
fit_lcs_consc_main_strong_ideal_cg     0.6603
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_consc_ideal_cg <- broom::tidy(fit_lcs_consc_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a -0.031 -0.099 -0.960 0.337
d_consc_1 ~1 d_int_b 0.018 0.061 1.122 0.262
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.008 0.026 0.567 0.571
d_consc_1 ~1 d_int 0.008 0.028 0.567 0.571
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 6277.643 6410.477 1 0 0.021

Almost no change in conscientiousness in both groups (n.s.). No significant differences according to the LRTs.

Neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal_cg, fit_lcs_neuro_main_weak_ideal_cg, fit_lcs_neuro_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal_cg 24 6589.6 6731.9 20.835                   
fit_lcs_neuro_main_weak_ideal_cg   26 6601.9 6734.8 37.160    12.0985       2
fit_lcs_neuro_main_strong_ideal_cg 30 6594.2 6708.1 37.434     0.2717       4
                                   Pr(>Chisq)   
fit_lcs_neuro_main_config_ideal_cg              
fit_lcs_neuro_main_weak_ideal_cg      0.00236 **
fit_lcs_neuro_main_strong_ideal_cg    0.99157   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_neuro_ideal_cg <- broom::tidy(fit_lcs_neuro_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a 0.025 0.091 0.758 0.448
d_neuro_1 ~1 d_int_b 0.019 0.054 0.970 0.332
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.02 0.074 1.214 0.225
d_neuro_1 ~1 d_int 0.02 0.058 1.214 0.225
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 6601.927 6734.761 0.994 0.032 0.04

Very similar change in neuroticism in both groups. No significant differences according to the LRTs (at p < .001). Some evidence for significant increase in model fit when constraining factor structures to be equal (weak MI), but this does not concern the latent change score yet.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal_cg, fit_lcs_openn_main_weak_ideal_cg, fit_lcs_openn_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal_cg 24 7407.5 7549.8 44.796                   
fit_lcs_openn_main_weak_ideal_cg   26 7406.6 7539.4 47.870     2.5646       2
fit_lcs_openn_main_strong_ideal_cg 30 7402.6 7516.5 51.960     3.9391       4
                                   Pr(>Chisq)
fit_lcs_openn_main_config_ideal_cg           
fit_lcs_openn_main_weak_ideal_cg       0.2774
fit_lcs_openn_main_strong_ideal_cg     0.4143
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_openn_ideal_cg <- broom::tidy(fit_lcs_openn_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal_cg, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.014 0.115 0.737 0.461
d_openn_1 ~1 d_int_b 0.016 0.090 1.513 0.130
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.015 0.123 1.657 0.097
d_openn_1 ~1 d_int 0.015 0.087 1.657 0.097
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7406.556 7539.39 0.988 0.045 0.035

Similar change in ideal-self openness in both groups. No significant differences according to the LRTs.

6.8.4.4 Summary of latent main effects
params_main_summary_cg <- bind_rows(
  params_main_lcs_extra_current_cg %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_extra_ideal_cg %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_current_cg %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_ideal_cg %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_current_cg %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_ideal_cg %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_current_cg %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_ideal_cg %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_current_cg %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_ideal_cg %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "Control", "Intervention"))

kable(params_main_summary_cg, digits = 3)
trait self group beta p.value sig_diff
extraversion current Control 0.249 0.035
extraversion current Intervention 0.335 0.000
extraversion ideal Control -0.023 0.858
extraversion ideal Intervention -0.080 0.222
agreeableness current Control 0.357 0.008
agreeableness current Intervention 0.112 0.070
agreeableness ideal Control -0.046 0.664
agreeableness ideal Intervention -0.041 0.473
conscientiousness current Control 0.256 0.010
conscientiousness current Intervention 0.232 0.000
conscientiousness ideal Control -0.099 0.337
conscientiousness ideal Intervention 0.061 0.262
neuroticism current Control -0.314 0.002
neuroticism current Intervention -0.421 0.000
neuroticism ideal Control 0.091 0.448
neuroticism ideal Intervention 0.054 0.332
openness current Control 0.070 0.541
openness current Intervention 0.304 0.000
openness ideal Control 0.115 0.461
openness ideal Intervention 0.090 0.130

7 Exploratory findings

7.1 Differences across intervention groups (a)

Now confirmatory in Study 2.

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

Not assessed, anymore, in study 2. Please see study 1 report for results.

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals (in the 5 free-form adjectives) than those that were not.

TBD!

7.4 Manipulation check (d)

Does self-improvement intervene on current self trait change (but not ideal self)? Does self-acceptance intervene on ideal self trait change (but not current self)?

7.4.1 From T1 to T2

Changes in current self traits over time:

Show the code
df_manip_check_curr <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_unlist <- as.data.frame(summary(df_manip_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr)) {
  df_manip_check_curr_unlist <- bind_rows(df_manip_check_curr_unlist, 
                                          as.data.frame(summary(df_manip_check_curr[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.845 0.039 0.000 ***
extraversion time 0.113 0.026 0.000 ***
extraversion group -0.069 0.054 0.203
extraversion time*group 0.009 0.036 0.800
agreeableness Intercept 3.633 0.032 0.000 ***
agreeableness time 0.048 0.023 0.038 *
agreeableness group -0.030 0.046 0.515
agreeableness time*group 0.033 0.033 0.316
conscientiousness Intercept 3.371 0.042 0.000 ***
conscientiousness time 0.075 0.027 0.006 **
conscientiousness group 0.026 0.059 0.653
conscientiousness time*group 0.026 0.038 0.490
neuroticism Intercept 3.220 0.046 0.000 ***
neuroticism time -0.172 0.030 0.000 ***
neuroticism group 0.033 0.065 0.611
neuroticism time*group -0.006 0.042 0.887
openness Intercept 3.707 0.035 0.000 ***
openness time 0.079 0.023 0.001 ***
openness group -0.029 0.050 0.555
openness time*group -0.001 0.032 0.977
sociability Intercept 2.485 0.054 0.000 ***
sociability time 0.168 0.037 0.000 ***
sociability group -0.040 0.076 0.600
sociability time*group -0.061 0.053 0.244
assertiveness Intercept 2.908 0.048 0.000 ***
assertiveness time 0.076 0.035 0.028 *
assertiveness group -0.078 0.068 0.250
assertiveness time*group 0.036 0.048 0.453
energy Intercept 3.140 0.046 0.000 ***
energy time 0.094 0.038 0.014 *
energy group -0.088 0.065 0.176
energy time*group 0.053 0.054 0.326
compassion Intercept 3.753 0.041 0.000 ***
compassion time 0.042 0.037 0.254
compassion group -0.056 0.057 0.326
compassion time*group 0.079 0.051 0.124
respectfulness Intercept 4.035 0.038 0.000 ***
respectfulness time 0.013 0.032 0.680
respectfulness group -0.014 0.054 0.804
respectfulness time*group -0.002 0.044 0.955
trust Intercept 3.110 0.045 0.000 ***
trust time 0.097 0.035 0.006 **
trust group -0.016 0.064 0.800
trust time*group 0.011 0.049 0.831
organization Intercept 3.445 0.052 0.000 ***
organization time 0.056 0.037 0.131
organization group 0.109 0.074 0.143
organization time*group 0.023 0.052 0.657
productiveness Intercept 3.148 0.049 0.000 ***
productiveness time 0.141 0.039 0.000 ***
productiveness group 0.043 0.069 0.538
productiveness time*group 0.001 0.054 0.978
responsibility Intercept 3.522 0.045 0.000 ***
responsibility time 0.035 0.036 0.333
responsibility group -0.068 0.064 0.284
responsibility time*group 0.052 0.051 0.311
anxiety Intercept 3.525 0.050 0.000 ***
anxiety time -0.147 0.037 0.000 ***
anxiety group 0.093 0.070 0.185
anxiety time*group -0.012 0.052 0.817
depression Intercept 3.144 0.054 0.000 ***
depression time -0.238 0.039 0.000 ***
depression group 0.004 0.076 0.954
depression time*group 0.031 0.055 0.572
volatility Intercept 2.993 0.054 0.000 ***
volatility time -0.127 0.042 0.002 **
volatility group 0.001 0.076 0.987
volatility time*group -0.045 0.058 0.441
curiosity Intercept 3.817 0.043 0.000 ***
curiosity time 0.052 0.032 0.106
curiosity group -0.014 0.060 0.817
curiosity time*group 0.006 0.045 0.899
aesthetic Intercept 3.661 0.047 0.000 ***
aesthetic time 0.047 0.036 0.192
aesthetic group -0.087 0.066 0.185
aesthetic time*group 0.036 0.050 0.474
imagination Intercept 3.642 0.045 0.000 ***
imagination time 0.141 0.035 0.000 ***
imagination group 0.014 0.063 0.824
imagination time*group -0.046 0.049 0.349

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in current-self trait levels (timeXgroup). Significant (at p < .001) changes over time in current-self trait levels (time) for 3 of the domains and five of the facets (independent of intervention group membership).

Changes in ideal self traits over time:

Show the code
df_manip_check_ideal <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_unlist <- as.data.frame(summary(df_manip_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal)) {
  df_manip_check_ideal_unlist <- bind_rows(df_manip_check_ideal_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.919 0.027 0.000 ***
extraversion time -0.023 0.024 0.351
extraversion group -0.009 0.038 0.812
extraversion time*group 0.007 0.034 0.827
agreeableness Intercept 4.078 0.029 0.000 ***
agreeableness time 0.007 0.024 0.777
agreeableness group -0.018 0.041 0.670
agreeableness time*group -0.035 0.034 0.300
conscientiousness Intercept 4.414 0.027 0.000 ***
conscientiousness time 0.027 0.024 0.266
conscientiousness group 0.005 0.038 0.889
conscientiousness time*group -0.018 0.034 0.601
neuroticism Intercept 1.704 0.028 0.000 ***
neuroticism time 0.004 0.026 0.878
neuroticism group -0.032 0.039 0.413
neuroticism time*group 0.032 0.037 0.381
openness Intercept 4.140 0.031 0.000 ***
openness time 0.054 0.025 0.035 *
openness group -0.052 0.043 0.233
openness time*group 0.001 0.036 0.971
sociability Intercept 3.735 0.038 0.000 ***
sociability time -0.085 0.036 0.020 *
sociability group -0.029 0.054 0.583
sociability time*group 0.060 0.051 0.239
assertiveness Intercept 3.832 0.037 0.000 ***
assertiveness time 0.001 0.035 0.984
assertiveness group 0.001 0.052 0.981
assertiveness time*group 0.002 0.049 0.967
energy Intercept 4.189 0.034 0.000 ***
energy time 0.016 0.038 0.672
energy group 0.003 0.048 0.953
energy time*group -0.047 0.053 0.384
compassion Intercept 4.029 0.038 0.000 ***
compassion time 0.016 0.037 0.675
compassion group -0.019 0.053 0.721
compassion time*group -0.008 0.052 0.885
respectfulness Intercept 4.454 0.032 0.000 ***
respectfulness time -0.001 0.029 0.963
respectfulness group -0.031 0.045 0.492
respectfulness time*group -0.007 0.041 0.862
trust Intercept 3.751 0.040 0.000 ***
trust time 0.013 0.036 0.728
trust group -0.002 0.056 0.965
trust time*group -0.099 0.051 0.053
organization Intercept 4.426 0.032 0.000 ***
organization time 0.006 0.034 0.849
organization group 0.001 0.045 0.982
organization time*group 0.031 0.048 0.511
productiveness Intercept 4.513 0.030 0.000 ***
productiveness time 0.045 0.030 0.137
productiveness group 0.055 0.042 0.197
productiveness time*group -0.052 0.042 0.215
responsibility Intercept 4.300 0.035 0.000 ***
responsibility time 0.035 0.033 0.288
responsibility group -0.031 0.049 0.523
responsibility time*group -0.027 0.046 0.562
anxiety Intercept 1.876 0.035 0.000 ***
anxiety time 0.030 0.039 0.445
anxiety group -0.036 0.050 0.466
anxiety time*group 0.004 0.055 0.947
depression Intercept 1.499 0.030 0.000 ***
depression time -0.003 0.031 0.911
depression group -0.022 0.042 0.597
depression time*group 0.040 0.043 0.356
volatility Intercept 1.736 0.035 0.000 ***
volatility time -0.018 0.036 0.611
volatility group -0.041 0.049 0.409
volatility time*group 0.066 0.050 0.188
curiosity Intercept 4.129 0.038 0.000 ***
curiosity time 0.028 0.038 0.455
curiosity group -0.046 0.054 0.396
curiosity time*group 0.002 0.053 0.965
aesthetic Intercept 3.922 0.039 0.000 ***
aesthetic time 0.108 0.037 0.004 **
aesthetic group -0.082 0.056 0.142
aesthetic time*group -0.050 0.052 0.334
imagination Intercept 4.369 0.036 0.000 ***
imagination time 0.024 0.036 0.506
imagination group -0.010 0.051 0.842
imagination time*group 0.028 0.051 0.585

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in ideal-self trait levels (timeXgroup). No significant changes over time in ideal-self trait levels (time; independent of intervention group membership).

7.4.2 From T2 to T3

Changes in current self traits over time:

Show the code
df_sbsa2_t2t3 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% mutate(time_d = time - 2)

df_manip_check_curr_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_fu_unlist <- as.data.frame(summary(df_manip_check_curr_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr_fu)) {
  df_manip_check_curr_fu_unlist <- bind_rows(df_manip_check_curr_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_curr_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.951 0.041 0.000 ***
extraversion time 0.032 0.025 0.217
extraversion group -0.050 0.058 0.389
extraversion time*group -0.017 0.036 0.625
agreeableness Intercept 3.697 0.035 0.000 ***
agreeableness time 0.015 0.022 0.486
agreeableness group -0.011 0.050 0.822
agreeableness time*group -0.019 0.031 0.531
conscientiousness Intercept 3.468 0.045 0.000 ***
conscientiousness time 0.072 0.028 0.009 **
conscientiousness group 0.067 0.064 0.296
conscientiousness time*group -0.060 0.039 0.121
neuroticism Intercept 3.068 0.049 0.000 ***
neuroticism time -0.062 0.028 0.030 *
neuroticism group -0.015 0.069 0.829
neuroticism time*group 0.017 0.040 0.674
openness Intercept 3.792 0.039 0.000 ***
openness time -0.001 0.022 0.969
openness group -0.038 0.054 0.484
openness time*group 0.016 0.031 0.619
sociability Intercept 2.641 0.057 0.000 ***
sociability time 0.046 0.036 0.202
sociability group -0.092 0.080 0.254
sociability time*group 0.006 0.050 0.902
assertiveness Intercept 2.984 0.051 0.000 ***
assertiveness time 0.039 0.036 0.281
assertiveness group -0.050 0.072 0.484
assertiveness time*group -0.023 0.050 0.648
energy Intercept 3.228 0.048 0.000 ***
energy time 0.011 0.040 0.781
energy group -0.008 0.068 0.905
energy time*group -0.034 0.056 0.535
compassion Intercept 3.814 0.044 0.000 ***
compassion time 0.040 0.037 0.277
compassion group 0.000 0.062 1.000
compassion time*group -0.053 0.052 0.301
respectfulness Intercept 4.067 0.041 0.000 ***
respectfulness time 0.025 0.029 0.394
respectfulness group -0.017 0.058 0.772
respectfulness time*group -0.011 0.041 0.791
trust Intercept 3.211 0.048 0.000 ***
trust time -0.018 0.035 0.603
trust group -0.019 0.068 0.780
trust time*group 0.010 0.048 0.834
organization Intercept 3.520 0.056 0.000 ***
organization time 0.077 0.037 0.038 *
organization group 0.153 0.079 0.053
organization time*group -0.027 0.052 0.607
productiveness Intercept 3.297 0.054 0.000 ***
productiveness time 0.077 0.037 0.039 *
productiveness group 0.064 0.076 0.402
productiveness time*group -0.091 0.052 0.080
responsibility Intercept 3.586 0.049 0.000 ***
responsibility time 0.064 0.040 0.113
responsibility group -0.018 0.068 0.797
responsibility time*group -0.060 0.056 0.289
anxiety Intercept 3.396 0.053 0.000 ***
anxiety time -0.035 0.038 0.355
anxiety group 0.047 0.075 0.534
anxiety time*group -0.036 0.053 0.498
depression Intercept 2.922 0.058 0.000 ***
depression time -0.076 0.039 0.052
depression group -0.013 0.081 0.876
depression time*group 0.004 0.054 0.941
volatility Intercept 2.886 0.056 0.000 ***
volatility time -0.070 0.038 0.069
volatility group -0.078 0.078 0.322
volatility time*group 0.072 0.054 0.181
curiosity Intercept 3.865 0.046 0.000 ***
curiosity time 0.029 0.033 0.374
curiosity group -0.015 0.064 0.811
curiosity time*group -0.048 0.046 0.300
aesthetic Intercept 3.724 0.051 0.000 ***
aesthetic time -0.025 0.035 0.486
aesthetic group -0.060 0.072 0.401
aesthetic time*group 0.031 0.050 0.534
imagination Intercept 3.786 0.047 0.000 ***
imagination time -0.007 0.034 0.834
imagination group -0.037 0.065 0.575
imagination time*group 0.065 0.048 0.177

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). Suggestive increase in conscientiousness.

Changes in ideal self traits over time:

Show the code
df_manip_check_ideal_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_fu_unlist <- as.data.frame(summary(df_manip_check_ideal_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal_fu)) {
  df_manip_check_ideal_fu_unlist <- bind_rows(df_manip_check_ideal_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.897 0.029 0.000 ***
extraversion time -0.006 0.024 0.808
extraversion group 0.000 0.041 0.997
extraversion time*group -0.016 0.034 0.649
agreeableness Intercept 4.099 0.032 0.000 ***
agreeableness time 0.003 0.024 0.891
agreeableness group -0.072 0.045 0.108
agreeableness time*group 0.033 0.033 0.327
conscientiousness Intercept 4.448 0.030 0.000 ***
conscientiousness time -0.007 0.023 0.761
conscientiousness group -0.022 0.042 0.605
conscientiousness time*group 0.006 0.032 0.848
neuroticism Intercept 1.700 0.029 0.000 ***
neuroticism time 0.010 0.025 0.675
neuroticism group 0.012 0.041 0.769
neuroticism time*group -0.011 0.035 0.760
openness Intercept 4.192 0.033 0.000 ***
openness time 0.004 0.026 0.864
openness group -0.054 0.047 0.250
openness time*group 0.006 0.037 0.866
sociability Intercept 3.661 0.042 0.000 ***
sociability time 0.003 0.036 0.923
sociability group 0.029 0.059 0.615
sociability time*group -0.054 0.050 0.284
assertiveness Intercept 3.826 0.040 0.000 ***
assertiveness time -0.021 0.039 0.580
assertiveness group 0.010 0.057 0.863
assertiveness time*group -0.024 0.054 0.655
energy Intercept 4.203 0.037 0.000 ***
energy time 0.004 0.040 0.927
energy group -0.044 0.052 0.397
energy time*group 0.034 0.056 0.541
compassion Intercept 4.070 0.041 0.000 ***
compassion time 0.035 0.038 0.354
compassion group -0.057 0.058 0.327
compassion time*group 0.019 0.053 0.726
respectfulness Intercept 4.454 0.035 0.000 ***
respectfulness time -0.005 0.029 0.865
respectfulness group -0.044 0.049 0.372
respectfulness time*group 0.027 0.041 0.518
trust Intercept 3.774 0.043 0.000 ***
trust time -0.021 0.037 0.568
trust group -0.112 0.061 0.066
trust time*group 0.054 0.052 0.296
organization Intercept 4.434 0.034 0.000 ***
organization time 0.037 0.034 0.281
organization group 0.038 0.048 0.428
organization time*group -0.028 0.048 0.557
productiveness Intercept 4.564 0.033 0.000 ***
productiveness time -0.049 0.032 0.121
productiveness group -0.008 0.046 0.865
productiveness time*group 0.015 0.044 0.732
responsibility Intercept 4.346 0.038 0.000 ***
responsibility time 0.001 0.034 0.984
responsibility group -0.076 0.053 0.154
responsibility time*group 0.024 0.048 0.614
anxiety Intercept 1.901 0.038 0.000 ***
anxiety time -0.002 0.039 0.953
anxiety group -0.020 0.053 0.704
anxiety time*group 0.053 0.055 0.336
depression Intercept 1.490 0.032 0.000 ***
depression time -0.029 0.031 0.350
depression group 0.021 0.044 0.637
depression time*group 0.003 0.043 0.949
volatility Intercept 1.708 0.038 0.000 ***
volatility time 0.061 0.035 0.085
volatility group 0.036 0.053 0.499
volatility time*group -0.092 0.050 0.065
curiosity Intercept 4.157 0.042 0.000 ***
curiosity time -0.008 0.039 0.847
curiosity group -0.052 0.059 0.378
curiosity time*group -0.033 0.055 0.548
aesthetic Intercept 4.034 0.044 0.000 ***
aesthetic time -0.011 0.037 0.776
aesthetic group -0.135 0.061 0.028 *
aesthetic time*group 0.080 0.052 0.125
imagination Intercept 4.385 0.038 0.000 ***
imagination time 0.037 0.036 0.315
imagination group 0.022 0.053 0.682
imagination time*group -0.029 0.051 0.575

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). No group differences.

7.4.3 Descriptive plots: mean-level changes

7.4.3.1 Personality

Prepare data frame for plotting:

Show the code
df_manip_check_forplot <- df_sbsa2 %>% 
  select(pid, time, rando, contains("_comb_"), -c(na_comb_curr, na_comb_ideal)) %>% 
  pivot_longer(-c(pid, time, rando), 
               cols_vary = "slowest",
               names_to = c("trait", "reference"),
               names_pattern = "(.*)_(.*)",
               values_to = "score") %>% 
  mutate(trait = gsub("_comb", "", trait),
         reference = ifelse(reference=="curr", "current", reference)) %>% 
  left_join(tibble(long = str_to_title(names(b5_vars)), trait = str_trunc(names(b5_vars), 5, ellipsis = ""))) %>% 
  select(-trait, trait = long) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, reference, rando, time) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, 
                        levels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control"), 
                        labels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control")),
         Time = factor(time),
         Trait = factor(trait, 
                        levels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)], # group facets with each trait
                        labels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)]),
         Reference = factor(reference, levels = c("current", "ideal"), labels = c("Current Self", "Ideal Self")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time, rando, trait, reference))

Plotting mean-level changes on a descriptive level: Big Five dimensions and facets

Show the code
ggplot(df_manip_check_forplot, 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.45)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.45)) +
  ylab("Mean Trait Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 4) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Extraversion

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Extraversion"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Agreeableness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Agreeableness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Conscientiousness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Conscientiousness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Neuroticism

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Neuroticism"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Openness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Openness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.4.3.2 Well-Being

Prepare data frame for plotting:

Show the code
df_manip_check_wb_forplot <- df_sbsa2 %>% 
  mutate(time_d = time - 1) %>% 
  select(pid, time_d, rando, swls, meaning, selfes, concept) %>% 
  pivot_longer(-c(pid, time_d, rando), 
               cols_vary = "slowest",
               names_to = c("trait"),
               values_to = "score") %>% 
  mutate(trait = case_when(trait=="swls" ~ "Life Satisfaction", trait=="meaning" ~ "Meaning in Life", 
                           trait=="selfes" ~ "Self-Esteem", trait=="concept" ~ "Self-Concept Clarity")) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, rando, time_d) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, levels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control"), 
                        labels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control")),
         Time = factor(time_d+1),
         Trait = factor(trait, 
                        levels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity"), # group facets with each trait
                        labels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time_d, rando, trait))

Plotting mean-level changes on a descriptive level: all four well-being aspects

Show the code
ggplot(df_manip_check_wb_forplot, 
       aes(y = m_trait, x = Time, shape = Group)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Well-Being Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 2) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.5 Word clouds of change descriptions (e)

Generate word clouds based on the content from the free-form change descriptions written after the intervention at T2 and T3 (same question asked at both time points).

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_sb <- df_sbsa2 %>% filter(!is.na(sb14_01) & rando!="Waitlist-Control") %>% pull(sb14_01)
text_sb <- gsub("[\r\n]", " ", text_sb)
# Create a corpus  
docs_sb <- tm::VCorpus(tm::VectorSource(text_sb))

# cleaning the text
docs_sb <- docs_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sb <- tm_map(docs_sb, content_transformer(tolower))
docs_sb <- tm_map(docs_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sb <- TermDocumentMatrix(docs_sb) 
matrix_sb <- as.matrix(dtm_sb) 
words_sb <- sort(rowSums(matrix_sb), decreasing=TRUE) 
df_words_sb <- data.frame(word = names(words_sb), freq=words_sb)
# remove a few of the frequent "non-words"
df_words_sb <- df_words_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_sa <- df_sbsa2 %>% filter(!is.na(sa13_01) & rando!="Waitlist-Control") %>% pull(sa13_01)
text_sa <- gsub("[\r\n]", " ", text_sa)
# Create a corpus  
docs_sa <- tm::VCorpus(tm::VectorSource(text_sa))

# cleaning the text
docs_sa <- docs_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sa <- tm_map(docs_sa, content_transformer(tolower))
docs_sa <- tm_map(docs_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sa <- TermDocumentMatrix(docs_sa) 
matrix_sa <- as.matrix(dtm_sa) 
words_sa <- sort(rowSums(matrix_sa), decreasing=TRUE) 
df_words_sa <- data.frame(word = names(words_sa), freq=words_sa)
# remove a few of the frequent "non-words"
df_words_sa <- df_words_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sb$word, freq = df_words_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sa$word, freq = df_words_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Lastly, delete free-form text variables again from data set

df_sbsa2 <- df_sbsa2 %>% select(-c(sb14_01, sa13_01))
base::save(df_sbsa2, file = "data/df_sbsa2.rda")

7.6 Word clouds of diary entries (f)

Generate word clouds based on the content of the three diaries written between T1 and T2. I only focus on the two intervention groups here (not on the CG between T2 and T3).

Read in the data and see how many people filled out the diaries (optional but still compensated)

Show the code
path_diar1_sb <- "data/diaries/sb_1/data_PersonalityChange_2024-03-22_14-37.xlsx"
path_diar2_sb <- "data/diaries/sb_2/data_PersonalityChange_2024-03-22_16-19.xlsx"
path_diar3_sb <- "data/diaries/sb_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

path_diar1_sa <- "data/diaries/sa_1/data_PersonalityChange_2024-03-22_16-18.xlsx"
path_diar2_sa <- "data/diaries/sa_2/data_PersonalityChange_2024-03-22_16-20.xlsx"
path_diar3_sa <- "data/diaries/sa_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

# T1
diar1_sb <- readxl::read_excel(path_diar1_sb, col_names = F, skip = 2, guess_max = 10000)
var_names1_sb <- readxl::read_excel(path_diar1_sb, col_names = F)[c(1,2), ]
var_names1_sb <- data.frame(t(var_names1_sb))
colnames(diar1_sb) <- stringr::str_to_lower(var_names1_sb$X1) # only lower case pls
# label data 
diar1_sb <- labelled::set_variable_labels(diar1_sb, .labels = var_names1_sb$X2)
diar1_sb <- diar1_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar1_sa <- readxl::read_excel(path_diar1_sa, col_names = F, skip = 2, guess_max = 10000)
var_names1_sa <- readxl::read_excel(path_diar1_sa, col_names = F)[c(1,2), ]
var_names1_sa <- data.frame(t(var_names1_sa))
colnames(diar1_sa) <- stringr::str_to_lower(var_names1_sa$X1) # only lower case pls
# label data 
diar1_sa <- labelled::set_variable_labels(diar1_sa, .labels = var_names1_sa$X2)
diar1_sa <- diar1_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T2
diar2_sb <- readxl::read_excel(path_diar2_sb, col_names = F, skip = 2, guess_max = 10000)
var_names2_sb <- readxl::read_excel(path_diar2_sb, col_names = F)[c(1,2), ]
var_names2_sb <- data.frame(t(var_names2_sb))
colnames(diar2_sb) <- stringr::str_to_lower(var_names2_sb$X1) # only lower case pls
# label data 
diar2_sb <- labelled::set_variable_labels(diar2_sb, .labels = var_names2_sb$X2)
diar2_sb <- diar2_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar2_sa <- readxl::read_excel(path_diar2_sa, col_names = F, skip = 2, guess_max = 10000)
var_names2_sa <- readxl::read_excel(path_diar2_sa, col_names = F)[c(1,2), ]
var_names2_sa <- data.frame(t(var_names2_sa))
colnames(diar2_sa) <- stringr::str_to_lower(var_names2_sa$X1) # only lower case pls
# label data 
diar2_sa <- labelled::set_variable_labels(diar2_sa, .labels = var_names2_sa$X2)
diar2_sa <- diar2_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T3
diar3_sb <- readxl::read_excel(path_diar3_sb, col_names = F, skip = 2, guess_max = 10000)
var_names3_sb <- readxl::read_excel(path_diar3_sb, col_names = F)[c(1,2), ]
var_names3_sb <- data.frame(t(var_names3_sb))
colnames(diar3_sb) <- stringr::str_to_lower(var_names3_sb$X1) # only lower case pls
# label data 
diar3_sb <- labelled::set_variable_labels(diar3_sb, .labels = var_names3_sb$X2)
diar3_sb <- diar3_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar3_sa <- readxl::read_excel(path_diar3_sa, col_names = F, skip = 2, guess_max = 10000)
var_names3_sa <- readxl::read_excel(path_diar3_sa, col_names = F)[c(1,2), ]
var_names3_sa <- data.frame(t(var_names3_sa))
colnames(diar3_sa) <- stringr::str_to_lower(var_names3_sa$X1) # only lower case pls
# label data 
diar3_sa <- labelled::set_variable_labels(diar3_sa, .labels = var_names3_sa$X2)
diar3_sa <- diar3_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# appending together all three diaries in each group
diaries_sb <- bind_rows(diar1_sb, diar2_sb, diar3_sb)
diaries_sa <- bind_rows(diar1_sa, diar2_sa, diar3_sa)

# filter out one case where it was obvious that they used a LLM
diaries_sb <- diaries_sb %>% filter(!str_detect(sb15_01, "language model"))

How many diaries at each time point?

tibble(time = c(1, 2, 3), improve = c(nrow(diar1_sb), nrow(diar2_sb), nrow(diar2_sb)),
       accept = c(nrow(diar1_sa), nrow(diar2_sa), nrow(diar2_sa)))
# A tibble: 3 × 3
   time improve accept
  <dbl>   <int>  <int>
1     1     311    287
2     2     305    294
3     3     305    294

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_diaries_sb <- diaries_sb %>% pull(sb15_01)
text_diaries_sb <- gsub("[\r\n]", " ", text_diaries_sb)
# Create a corpus  
docs_diaries_sb <- tm::VCorpus(tm::VectorSource(text_diaries_sb))

# cleaning the text
docs_diaries_sb <- docs_diaries_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sb <- tm_map(docs_diaries_sb, content_transformer(tolower))
docs_diaries_sb <- tm_map(docs_diaries_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sb <- TermDocumentMatrix(docs_diaries_sb) 
matrix_diaries_sb <- as.matrix(dtm_diaries_sb) 
words_diaries_sb <- sort(rowSums(matrix_diaries_sb), decreasing=TRUE) 
df_words_diaries_sb <- data.frame(word = names(words_diaries_sb), freq=words_diaries_sb)
# remove a few of the frequent "non-words"
df_words_diaries_sb <- df_words_diaries_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_diaries_sa <- diaries_sa %>% pull(sa15_01)
text_diaries_sa <- gsub("[\r\n]", " ", text_diaries_sa)
# Create a corpus  
docs_diaries_sa <- tm::VCorpus(tm::VectorSource(text_diaries_sa))

# cleaning the text
docs_diaries_sa <- docs_diaries_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sa <- tm_map(docs_diaries_sa, content_transformer(tolower))
docs_diaries_sa <- tm_map(docs_diaries_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sa <- TermDocumentMatrix(docs_diaries_sa) 
matrix_diaries_sa <- as.matrix(dtm_diaries_sa) 
words_diaries_sa <- sort(rowSums(matrix_diaries_sa), decreasing=TRUE) 
df_words_diaries_sa <- data.frame(word = names(words_diaries_sa), freq=words_diaries_sa)
# remove a few of the frequent "non-words"
df_words_diaries_sa <- df_words_diaries_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sb$word, freq = df_words_diaries_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sa$word, freq = df_words_diaries_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

7.7 Age as moderator of trait change (f)

Does age moderate the extent to which participants in the intervention changed over time?

7.7.1 Descriptives: Age & change goals

Some descriptives first:

# without the control group to make this similar to Study 1
df_sbsa2_age <- df_sbsa2 %>% filter(rando != "Waitlist-Control")

summary(df_sbsa2_age$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  18.00   24.00   28.00   30.62   35.00   69.00       3 

Correlation age & general improvement goal

cor.test(df_sbsa2_age$age, df_sbsa2_age$sb06_01)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$sb06_01
t = -0.66655, df = 335, p-value = 0.5055
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.14267388  0.07071672
sample estimates:
        cor 
-0.03639342 

Correlation not significant.

Frequency of self-improvement behaviors
- (1) I thought about the ways I would like to change
- (2) I sought out environments that would help me be the kind of person I want to be
- (3) I practiced new habits to achieve my change goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_01)) %>% mutate(item = "sb04_01"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_02)) %>% mutate(item = "sb04_02"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_03)) %>% mutate(item = "sb04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sb04_01 -0.108 -0.220 0.006 0.064
sb04_02 -0.136 -0.246 -0.021 0.020
sb04_03 -0.188 -0.297 -0.075 0.001

Facet-level improvement goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability -0.170 -0.272 -0.065 0.002
assertiveness -0.085 -0.190 0.022 0.119
energy 0.080 -0.027 0.185 0.143
compassion -0.097 -0.202 0.010 0.075
respectfulness -0.102 -0.206 0.005 0.063
trust -0.026 -0.133 0.081 0.632
organization -0.143 -0.246 -0.037 0.009
productiveness -0.171 -0.272 -0.065 0.002
responsibility -0.131 -0.235 -0.025 0.016
anxiety -0.108 -0.213 -0.002 0.047
depression -0.114 -0.218 -0.007 0.037
volatility -0.100 -0.205 0.007 0.067
curiosity -0.057 -0.163 0.050 0.293
aesthetic 0.033 -0.075 0.139 0.552
imagination 0.025 -0.082 0.132 0.641

Negative correlations for conscientiousness facets.

Correlation age & general acceptance goal

cor.test(df_sbsa2_age$age, df_sbsa2_age$sa06_01)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$sa06_01
t = -3.2181, df = 333, p-value = 0.001417
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.27569323 -0.06777694
sample estimates:
       cor 
-0.1736697 

Significant negative correlation.

Frequency of self-acceptance behaviors
- (1) I thought about how I could be less judgmental and more self-affirming
- (2) I sought out environments that would help me accept who I am
- (3) I practiced new self-acceptance habits to affirm who I am

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_01)) %>% mutate(item = "sa04_01"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_02)) %>% mutate(item = "sa04_02"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_03)) %>% mutate(item = "sa04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sa04_01 -0.064 -0.179 0.053 0.284
sa04_02 -0.087 -0.201 0.031 0.147
sa04_03 0.036 -0.081 0.153 0.543

Facet-level acceptance goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability -0.135 -0.238 -0.028 0.014
assertiveness 0.014 -0.094 0.120 0.805
energy 0.003 -0.104 0.110 0.960
compassion -0.071 -0.176 0.037 0.198
respectfulness -0.070 -0.176 0.038 0.202
trust -0.076 -0.182 0.031 0.165
organization -0.154 -0.256 -0.047 0.005
productiveness -0.184 -0.285 -0.078 0.001
responsibility -0.107 -0.212 0.000 0.050
anxiety 0.002 -0.105 0.109 0.968
depression -0.035 -0.141 0.073 0.526
volatility -0.093 -0.198 0.014 0.088
curiosity -0.075 -0.181 0.032 0.170
aesthetic -0.027 -0.134 0.081 0.626
imagination -0.039 -0.146 0.068 0.477

Negative correlations for conscientiousness facets.

Correlation age & profile similarity (facet-level)

cor.test(df_sbsa2_age$age, df_sbsa2_age$profile_corr_facet_z)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$profile_corr_facet_z
t = 7.3729, df = 1757, p-value = 2.559e-13
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1275297 0.2182062
sample estimates:
      cor 
0.1732351 

Correlation age & profile similarity (item-level)

cor.test(df_sbsa2_age$age, df_sbsa2_age$profile_corr_item_z)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$profile_corr_item_z
t = 7.5012, df = 1755, p-value = 9.988e-14
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1305665 0.2211961
sample estimates:
      cor 
0.1762548 

Significantly higher similarity between current- and ideal-self with older age.

7.7.2 Moderation analysis: linear age

Reshape and split data set by intervention group:

Show the code
df_sbsa2_wide_pers_mod_age <- df_sbsa2 %>% 
  filter(rando != "Waitlist-Control") %>% 
  arrange(pid, time) %>% 
  mutate(age_z = (age - mean(age, na.rm=T)) / sd(age, na.rm=T)) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_z)

df_sbsa2_wide_pers_mod_age <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando != "Waitlist-Control") %>% 
  left_join(df_sbsa2_wide_pers_mod_age)
7.7.2.1 Run models

Adapt latent change score model from above (adding moderation by age) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_age_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_age_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_age_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main", "main")*age_z         # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod", "mod")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_current")), trait_age_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_ideal")), trait_age_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_current")), trait_age_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_ideal")), trait_age_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_current")), trait_age_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_ideal")), trait_age_fit_strong_ideal))
}
7.7.2.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_current, fit_lcs_extra_age_weak_current, fit_lcs_extra_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_current 34 9057.7 9220.2 59.606                   
fit_lcs_extra_age_weak_current   36 9054.2 9207.7 60.144     0.5132       2
fit_lcs_extra_age_strong_current 42 9045.2 9171.5 63.069     2.9290       6
                                 Pr(>Chisq)
fit_lcs_extra_age_config_current           
fit_lcs_extra_age_weak_current       0.7737
fit_lcs_extra_age_strong_current     0.8177
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_current <- broom::tidy(fit_lcs_extra_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.092 0.349 4.114 0.000
d_extra_1 ~1 d_int_b 0.090 0.320 3.648 0.000
extra_t1 ~ age_z main_a 0.024 0.039 0.668 0.504
extra_t1 ~ age_z main_b 0.044 0.078 1.199 0.231
d_extra_1 ~ age_z mod_a -0.044 -0.162 -1.853 0.064
d_extra_1 ~ age_z mod_b -0.023 -0.083 -1.225 0.220
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.090 0.342 5.215 0.000
d_extra_1 ~1 d_int 0.090 0.319 5.215 0.000
extra_t1 ~ age_z main 0.037 0.059 1.397 0.163
extra_t1 ~ age_z main 0.037 0.065 1.397 0.163
d_extra_1 ~ age_z mod -0.033 -0.122 -2.190 0.029
d_extra_1 ~ age_z mod -0.033 -0.120 -2.190 0.029
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 9054.245 9207.695 0.989 0.045 0.03

Slightly significant (at p < .05) moderation effect by age for extraversion but only in the constrained model. With older age, participants changed less in current-self extraversion. No significant differences between intervention groups according to the LRTs.

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_current, fit_lcs_agree_age_weak_current, fit_lcs_agree_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_current 34 7723.6 7886.1 29.232                   
fit_lcs_agree_age_weak_current   36 7720.7 7874.1 30.290    0.95091       2
fit_lcs_agree_age_strong_current 42 7710.8 7837.2 32.432    2.19265       6
                                 Pr(>Chisq)
fit_lcs_agree_age_config_current           
fit_lcs_agree_age_weak_current       0.6216
fit_lcs_agree_age_strong_current     0.9012
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_current <- broom::tidy(fit_lcs_agree_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.025 0.125 1.442 0.149
d_agree_1 ~1 d_int_b 0.019 0.096 1.107 0.268
agree_t1 ~ age_z main_a 0.080 0.205 3.589 0.000
agree_t1 ~ age_z main_b 0.045 0.119 2.024 0.043
d_agree_1 ~ age_z mod_a -0.004 -0.017 -0.219 0.827
d_agree_1 ~ age_z mod_b 0.004 0.021 0.292 0.770
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.022 0.107 1.750 0.080
d_agree_1 ~1 d_int 0.022 0.111 1.750 0.080
agree_t1 ~ age_z main 0.062 0.159 3.863 0.000
agree_t1 ~ age_z main 0.062 0.162 3.863 0.000
d_agree_1 ~ age_z mod 0.000 -0.001 -0.023 0.982
d_agree_1 ~ age_z mod 0.000 -0.001 -0.023 0.982
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7710.809 7837.179 1 0 0.033

No significant moderation by age for agreeableness (similar in both groups). However, slight “main effect” of age on agreeableness at T1. No significant differences between intervention groups according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_current, fit_lcs_consc_age_weak_current, fit_lcs_consc_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_current 34 8206.4 8368.9 33.484                   
fit_lcs_consc_age_weak_current   36 8206.0 8359.4 37.061     3.8502       2
fit_lcs_consc_age_strong_current 42 8201.3 8327.7 44.392     7.2854       6
                                 Pr(>Chisq)
fit_lcs_consc_age_config_current           
fit_lcs_consc_age_weak_current       0.1459
fit_lcs_consc_age_strong_current     0.2953
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_current <- broom::tidy(fit_lcs_consc_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.075 0.209 2.817 0.005
d_consc_1 ~1 d_int_b 0.100 0.249 3.566 0.000
consc_t1 ~ age_z main_a 0.194 0.272 4.918 0.000
consc_t1 ~ age_z main_b 0.186 0.256 3.931 0.000
d_consc_1 ~ age_z mod_a -0.004 -0.011 -0.175 0.861
d_consc_1 ~ age_z mod_b -0.032 -0.082 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.087 0.241 4.446 0.000
d_consc_1 ~1 d_int 0.087 0.219 4.446 0.000
consc_t1 ~ age_z main 0.190 0.266 6.201 0.000
consc_t1 ~ age_z main 0.190 0.261 6.201 0.000
d_consc_1 ~ age_z mod -0.018 -0.049 -1.072 0.284
d_consc_1 ~ age_z mod -0.018 -0.047 -1.072 0.284
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8205.978 8359.427 1 0.009 0.024

No significant moderation by age for conscientiousness (similar in both groups). Main effect of age on conscientiousness at T1. No significant differences according to the LRTs.

Neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_current, fit_lcs_neuro_age_weak_current, fit_lcs_neuro_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_current 34 8687.2 8849.7 35.936                   
fit_lcs_neuro_age_weak_current   36 8684.2 8837.7 36.955     1.1455       2
fit_lcs_neuro_age_strong_current 42 8675.2 8801.6 39.988     3.0486       6
                                 Pr(>Chisq)
fit_lcs_neuro_age_config_current           
fit_lcs_neuro_age_weak_current       0.5640
fit_lcs_neuro_age_strong_current     0.8027
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.178 -0.475 -6.367 0.000
d_neuro_1 ~1 d_int_b -0.179 -0.390 -5.612 0.000
neuro_t1 ~ age_z main_a -0.082 -0.099 -1.710 0.087
neuro_t1 ~ age_z main_b -0.092 -0.112 -1.815 0.069
d_neuro_1 ~ age_z mod_a 0.031 0.079 1.129 0.259
d_neuro_1 ~ age_z mod_b -0.005 -0.012 -0.188 0.851
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.177 -0.474 -8.435 0.000
d_neuro_1 ~1 d_int -0.177 -0.385 -8.435 0.000
neuro_t1 ~ age_z main -0.090 -0.109 -2.585 0.010
neuro_t1 ~ age_z main -0.090 -0.110 -2.585 0.010
d_neuro_1 ~ age_z mod 0.014 0.035 0.693 0.488
d_neuro_1 ~ age_z mod 0.014 0.030 0.693 0.488
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8684.2 8837.65 1 0.009 0.023

No significant moderation by age for neuroticism in both groups. Slight main effect of age on neuroticism at T1. No significant differences according to the LRTs.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_current, fit_lcs_openn_age_weak_current, fit_lcs_openn_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_current 34 8105.0 8267.5 35.171                   
fit_lcs_openn_age_weak_current   36 8108.4 8261.8 42.516      6.820       2
fit_lcs_openn_age_strong_current 42 8107.7 8234.1 53.853     11.283       6
                                 Pr(>Chisq)  
fit_lcs_openn_age_config_current             
fit_lcs_openn_age_weak_current      0.03304 *
fit_lcs_openn_age_strong_current    0.08003 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_current <- broom::tidy(fit_lcs_openn_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.076 0.312 3.376 0.001
d_openn_1 ~1 d_int_b 0.075 0.288 3.199 0.001
openn_t1 ~ age_z main_a 0.012 0.020 0.303 0.762
openn_t1 ~ age_z main_b 0.029 0.052 0.756 0.450
d_openn_1 ~ age_z mod_a 0.015 0.058 0.784 0.433
d_openn_1 ~ age_z mod_b -0.045 -0.175 -2.213 0.027
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.077 0.313 4.686 0.000
d_openn_1 ~1 d_int 0.077 0.296 4.686 0.000
openn_t1 ~ age_z main 0.021 0.033 0.751 0.452
openn_t1 ~ age_z main 0.021 0.038 0.751 0.452
d_openn_1 ~ age_z mod -0.015 -0.059 -1.089 0.276
d_openn_1 ~ age_z mod -0.015 -0.059 -1.089 0.276
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8108.35 8261.8 0.997 0.023 0.036

Very slight (but significant at p < .05) moderation by age for current-self openness in the self-improvement group only. No significant differences according to the LRTs, though. No main effects of age.

7.7.2.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_ideal, fit_lcs_extra_age_weak_ideal, fit_lcs_extra_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_ideal 34 8029.1 8191.6 49.280                   
fit_lcs_extra_age_weak_ideal   36 8026.8 8180.2 50.964     1.4060       2
fit_lcs_extra_age_strong_ideal 42 8016.3 8142.7 52.524     1.5598       6
                               Pr(>Chisq)
fit_lcs_extra_age_config_ideal           
fit_lcs_extra_age_weak_ideal       0.4951
fit_lcs_extra_age_strong_ideal     0.9554
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.016 -0.063 -0.672 0.502
d_extra_1 ~1 d_int_b -0.022 -0.089 -0.976 0.329
extra_t1 ~ age_z main_a 0.003 0.008 0.142 0.887
extra_t1 ~ age_z main_b 0.005 0.013 0.168 0.867
d_extra_1 ~ age_z mod_a -0.046 -0.183 -2.162 0.031
d_extra_1 ~ age_z mod_b -0.027 -0.112 -1.236 0.216
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.019 -0.079 -1.193 0.233
d_extra_1 ~1 d_int -0.019 -0.077 -1.193 0.233
extra_t1 ~ age_z main 0.004 0.010 0.204 0.838
extra_t1 ~ age_z main 0.004 0.010 0.204 0.838
d_extra_1 ~ age_z mod -0.036 -0.144 -2.357 0.018
d_extra_1 ~ age_z mod -0.036 -0.149 -2.357 0.018
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8026.766 8180.216 0.986 0.035 0.042

Very slight (but significant at p < .05) moderation by age for ideal-self extraversion in the self-acceptance group and in the constrained model. However, no significant differences according to the LRTs.

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_ideal, fit_lcs_agree_age_weak_ideal, fit_lcs_agree_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_ideal 34 7711.3 7873.8 43.810                   
fit_lcs_agree_age_weak_ideal   36 7707.8 7861.2 44.254     0.4518       2
fit_lcs_agree_age_strong_ideal 42 7699.2 7825.6 47.691     3.4628       6
                               Pr(>Chisq)
fit_lcs_agree_age_config_ideal           
fit_lcs_agree_age_weak_ideal       0.7978
fit_lcs_agree_age_strong_ideal     0.7489
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.006 0.020 0.247 0.805
d_agree_1 ~1 d_int_b -0.030 -0.113 -1.368 0.171
agree_t1 ~ age_z main_a 0.064 0.135 2.404 0.016
agree_t1 ~ age_z main_b 0.099 0.234 4.123 0.000
d_agree_1 ~ age_z mod_a 0.019 0.066 0.863 0.388
d_agree_1 ~ age_z mod_b -0.005 -0.018 -0.208 0.836
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.013 -0.045 -0.811 0.417
d_agree_1 ~1 d_int -0.013 -0.048 -0.811 0.417
agree_t1 ~ age_z main 0.083 0.174 4.538 0.000
agree_t1 ~ age_z main 0.083 0.198 4.538 0.000
d_agree_1 ~ age_z mod 0.007 0.024 0.445 0.657
d_agree_1 ~ age_z mod 0.007 0.027 0.445 0.657
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7699.221 7825.592 0.996 0.02 0.037

No significant moderation by age for ideal-self agreeableness (similar in both groups). Main effect of age on agreeableness at T1. No significant group differences according to LRTs.

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_ideal, fit_lcs_consc_age_weak_ideal, fit_lcs_consc_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_ideal 34 6930.6 7093.0 30.550                   
fit_lcs_consc_age_weak_ideal   36 6926.7 7080.2 30.698    0.12687       2
fit_lcs_consc_age_strong_ideal 42 6917.1 7043.5 33.109    2.50120       6
                               Pr(>Chisq)
fit_lcs_consc_age_config_ideal           
fit_lcs_consc_age_weak_ideal       0.9385
fit_lcs_consc_age_strong_ideal     0.8683
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.026 0.085 1.142 0.254
d_consc_1 ~1 d_int_b 0.010 0.036 0.441 0.659
consc_t1 ~ age_z main_a 0.027 0.059 1.046 0.296
consc_t1 ~ age_z main_b 0.052 0.132 2.266 0.023
d_consc_1 ~ age_z mod_a 0.001 0.004 0.057 0.954
d_consc_1 ~ age_z mod_b -0.001 -0.006 -0.071 0.943
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.017 0.056 1.101 0.271
d_consc_1 ~1 d_int 0.017 0.065 1.101 0.271
consc_t1 ~ age_z main 0.041 0.090 2.371 0.018
consc_t1 ~ age_z main 0.041 0.103 2.371 0.018
d_consc_1 ~ age_z mod -0.001 -0.002 -0.049 0.961
d_consc_1 ~ age_z mod -0.001 -0.003 -0.049 0.961
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 6926.71 7080.16 1 0 0.026

No significant moderation by age for ideal-self conscientiousness (similar in both groups). No significant differences according to the LRTs.

Neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_ideal, fit_lcs_neuro_age_weak_ideal, fit_lcs_neuro_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_ideal 34 7153.2 7315.7 34.914                   
fit_lcs_neuro_age_weak_ideal   36 7154.9 7308.4 40.614     4.4858       2
fit_lcs_neuro_age_strong_ideal 42 7145.5 7271.9 43.221     2.6711       6
                               Pr(>Chisq)
fit_lcs_neuro_age_config_ideal           
fit_lcs_neuro_age_weak_ideal       0.1062
fit_lcs_neuro_age_strong_ideal     0.8489
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.003 -0.010 -0.125 0.900
d_neuro_1 ~1 d_int_b 0.045 0.119 1.606 0.108
neuro_t1 ~ age_z main_a -0.057 -0.107 -1.900 0.057
neuro_t1 ~ age_z main_b -0.085 -0.186 -3.379 0.001
d_neuro_1 ~ age_z mod_a 0.031 0.090 1.158 0.247
d_neuro_1 ~ age_z mod_b 0.046 0.127 1.752 0.080
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.020 0.060 1.038 0.299
d_neuro_1 ~1 d_int 0.020 0.054 1.038 0.299
neuro_t1 ~ age_z main -0.073 -0.136 -3.767 0.000
neuro_t1 ~ age_z main -0.073 -0.161 -3.767 0.000
d_neuro_1 ~ age_z mod 0.039 0.112 2.073 0.038
d_neuro_1 ~ age_z mod 0.039 0.107 2.073 0.038
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 7154.903 7308.353 0.997 0.02 0.036

Slight moderation effect (significant at p < .05) by age for ideal-self neuroticism. Only significant in the constrained model. No significant group differences according to the LRTs.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_ideal, fit_lcs_openn_age_weak_ideal, fit_lcs_openn_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_ideal 34 7869.4 8031.9 64.935                   
fit_lcs_openn_age_weak_ideal   36 7866.0 8019.5 65.559     0.5366       2
fit_lcs_openn_age_strong_ideal 42 7859.6 7986.0 71.141     6.0840       6
                               Pr(>Chisq)
fit_lcs_openn_age_config_ideal           
fit_lcs_openn_age_weak_ideal       0.7647
fit_lcs_openn_age_strong_ideal     0.4138
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.015 0.072 0.933 0.351
d_openn_1 ~1 d_int_b 0.016 0.109 1.119 0.263
openn_t1 ~ age_z main_a -0.001 -0.004 -0.078 0.938
openn_t1 ~ age_z main_b 0.032 0.110 1.904 0.057
d_openn_1 ~ age_z mod_a -0.007 -0.032 -0.498 0.619
d_openn_1 ~ age_z mod_b -0.017 -0.116 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.016 0.074 1.467 0.142
d_openn_1 ~1 d_int 0.016 0.108 1.467 0.142
openn_t1 ~ age_z main 0.016 0.052 1.319 0.187
openn_t1 ~ age_z main 0.016 0.057 1.319 0.187
d_openn_1 ~ age_z mod -0.013 -0.058 -1.384 0.166
d_openn_1 ~ age_z mod -0.013 -0.090 -1.384 0.166
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 7866.015 8019.465 0.978 0.049 0.043

No significant moderation by age for ideal-self openness (similar in both groups). No significant differences according to the LRTs.

7.7.2.4 Summary of latent main and moderation effects of linear age
Show the code
params_age_summary <- bind_rows(
  params_age_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value)
) 

kable(params_age_summary, digits = 3)
trait self group beta p.value
extraversion current main_a 0.039 0.504
extraversion current main_b 0.078 0.231
extraversion current mod_a -0.162 0.064
extraversion current mod_b -0.083 0.220
extraversion ideal main_a 0.008 0.887
extraversion ideal main_b 0.013 0.867
extraversion ideal mod_a -0.183 0.031
extraversion ideal mod_b -0.112 0.216
agreeableness current main_a 0.205 0.000
agreeableness current main_b 0.119 0.043
agreeableness current mod_a -0.017 0.827
agreeableness current mod_b 0.021 0.770
agreeableness ideal main_a 0.135 0.016
agreeableness ideal main_b 0.234 0.000
agreeableness ideal mod_a 0.066 0.388
agreeableness ideal mod_b -0.018 0.836
conscientiousness current main_a 0.272 0.000
conscientiousness current main_b 0.256 0.000
conscientiousness current mod_a -0.011 0.861
conscientiousness current mod_b -0.082 0.175
conscientiousness ideal main_a 0.059 0.296
conscientiousness ideal main_b 0.132 0.023
conscientiousness ideal mod_a 0.004 0.954
conscientiousness ideal mod_b -0.006 0.943
neuroticism current main_a -0.099 0.087
neuroticism current main_b -0.112 0.069
neuroticism current mod_a 0.079 0.259
neuroticism current mod_b -0.012 0.851
neuroticism ideal main_a -0.107 0.057
neuroticism ideal main_b -0.186 0.001
neuroticism ideal mod_a 0.090 0.247
neuroticism ideal mod_b 0.127 0.080
openness current main_a 0.020 0.762
openness current main_b 0.052 0.450
openness current mod_a 0.058 0.433
openness current mod_b -0.175 0.027
openness ideal main_a -0.004 0.938
openness ideal main_b 0.110 0.057
openness ideal mod_a -0.032 0.619
openness ideal mod_b -0.116 0.175

Very few significant moderation effects (at p < .05): extraversion (ideal - acceptance group), neuroticism (ideal - in constrained model), openness (current - imrpovement group). Overall, not consistent with Study 1 results.
Plus a few main effects of age (at T1) in either intervention group.

7.7.3 Moderation analysis: age group split

Now that we saw that the two intervention groups did not really differ in terms of linear moderation effects, let’s see whether perhaps across the whole sample we can find differences in two age groups (-> in multigroup SEM of latent change score).

Split age by age 30: roughly the sample mean and consistent with findings by Miller on age differences

df_sbsa2_wide_pers_mod_age_split <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  mutate(age_d = ifelse(age <= 30, "young", "old")) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_d)

df_sbsa2_wide_pers_mod_age_split <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  left_join(df_sbsa2_wide_pers_mod_age_split) %>% 
  filter(!is.na(age_d))
7.7.3.1 Run models
Show the code
# create templates: we can use the same templates as above just with different group composition (split by age_d variable)

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_current")), trait_agesplit_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_ideal")), trait_agesplit_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_current")), trait_agesplit_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_ideal")), trait_agesplit_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_current")), trait_agesplit_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_ideal")), trait_agesplit_fit_strong_ideal))
}
7.7.3.2 Current self personality traits

Extraversion (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_current, fit_lcs_extra_agesplit_weak_current, fit_lcs_extra_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC Chisq Chisq diff Df diff
fit_lcs_extra_agesplit_config_current 24 8920.2 9062.5 66.15                   
fit_lcs_extra_agesplit_weak_current   26 8924.0 9056.8 73.94     8.1090       2
fit_lcs_extra_agesplit_strong_current 30 8925.1 9038.9 83.07     9.2066       4
                                      Pr(>Chisq)  
fit_lcs_extra_agesplit_config_current             
fit_lcs_extra_agesplit_weak_current      0.01734 *
fit_lcs_extra_agesplit_strong_current    0.05614 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_current <- broom::tidy(fit_lcs_extra_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.045 0.190 2.131 0.033
d_extra_1 ~1 d_int_b 0.116 0.391 5.552 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.083 0.347 5.28 0
d_extra_1 ~1 d_int 0.083 0.279 5.28 0
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 8923.955 9056.755 0.984 0.066 0.038

Similar change in extraversion in both groups (somewhat stronger in younger group!). No significant differences in latent change score according to the LRTs (2nd test).

Agreeableness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_current, fit_lcs_agree_agesplit_weak_current, fit_lcs_agree_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_agree_agesplit_config_current 24 7311.0 7453.3 22.194           
fit_lcs_agree_agesplit_weak_current   26 7307.4 7440.2 22.622     0.4042
fit_lcs_agree_agesplit_strong_current 30 7322.1 7435.9 45.286    21.7115
                                      Df diff Pr(>Chisq)    
fit_lcs_agree_agesplit_config_current                       
fit_lcs_agree_agesplit_weak_current         2  0.8170272    
fit_lcs_agree_agesplit_strong_current       4  0.0002287 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_current <- broom::tidy(fit_lcs_agree_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.035 0.172 2.194 0.028
d_agree_1 ~1 d_int_b 0.026 0.142 1.806 0.071
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.032 0.158 2.888 0.004
d_agree_1 ~1 d_int 0.032 0.177 2.888 0.004
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7307.404 7440.205 1 0 0.022

Very similar change in agreeableness in both groups. No significant differences according to the LRTs.

Conscientiousness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_current, fit_lcs_consc_agesplit_weak_current, fit_lcs_consc_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_consc_agesplit_config_current 24 7855.1 7997.4 32.286           
fit_lcs_consc_agesplit_weak_current   26 7852.2 7985.0 33.341      1.048
fit_lcs_consc_agesplit_strong_current 30 7878.8 7992.6 67.920     33.473
                                      Df diff Pr(>Chisq)    
fit_lcs_consc_agesplit_config_current                       
fit_lcs_consc_agesplit_weak_current         2     0.5923    
fit_lcs_consc_agesplit_strong_current       4  9.559e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_current <- broom::tidy(fit_lcs_consc_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.079 0.222 3.006 0.003
d_consc_1 ~1 d_int_b 0.100 0.251 4.344 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.092 0.260 5.133 0
d_consc_1 ~1 d_int 0.092 0.231 5.133 0
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7852.204 7985.005 0.998 0.026 0.018

Similar change in conscientiousness in both groups (slightly stronger change in younger group). LRT indicates significant group differences in latent change score.

Neuroticism (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_current, fit_lcs_neuro_agesplit_weak_current, fit_lcs_neuro_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_neuro_agesplit_config_current 24 8465.5 8607.8 17.904           
fit_lcs_neuro_agesplit_weak_current   26 8461.6 8594.4 17.972     0.0791
fit_lcs_neuro_agesplit_strong_current 30 8470.2 8584.0 34.624    16.7013
                                      Df diff Pr(>Chisq)   
fit_lcs_neuro_agesplit_config_current                      
fit_lcs_neuro_agesplit_weak_current         2   0.961231   
fit_lcs_neuro_agesplit_strong_current       4   0.002209 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.147 -0.348 -4.752 0
d_neuro_1 ~1 d_int_b -0.179 -0.428 -7.436 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.167 -0.396 -8.722 0
d_neuro_1 ~1 d_int -0.167 -0.399 -8.722 0
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 8461.566 8594.366 1 0 0.014

Relatively similar change in neuroticism in both groups (slightly stronger change in younger group). LRT indicates significant group differences in latent change score.

Openness (current self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_current, fit_lcs_openn_agesplit_weak_current, fit_lcs_openn_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_openn_agesplit_config_current 24 7662.8 7805.1 27.182           
fit_lcs_openn_agesplit_weak_current   26 7665.8 7798.6 34.187     6.3328
fit_lcs_openn_agesplit_strong_current 30 7665.9 7779.8 42.294     7.8423
                                      Df diff Pr(>Chisq)  
fit_lcs_openn_agesplit_config_current                     
fit_lcs_openn_agesplit_weak_current         2    0.04215 *
fit_lcs_openn_agesplit_strong_current       4    0.09753 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_current <- broom::tidy(fit_lcs_openn_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.041 0.176 1.928 0.054
d_openn_1 ~1 d_int_b 0.082 0.298 4.179 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.063 0.270 4.302 0
d_openn_1 ~1 d_int 0.063 0.226 4.302 0
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7665.824 7798.624 0.997 0.027 0.032

Relatively similar change in openness in both groups (slightly stronger change in younger group). LRT indicates no significant group differences in latent change score, however.

7.7.3.3 Ideal self personality traits

Extraversion (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_ideal, fit_lcs_extra_agesplit_weak_ideal, fit_lcs_extra_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_agesplit_config_ideal 24 7769.2 7911.4 19.640                   
fit_lcs_extra_agesplit_weak_ideal   26 7765.4 7898.2 19.899     0.2298       2
fit_lcs_extra_agesplit_strong_ideal 30 7767.1 7880.9 29.565     9.8005       4
                                    Pr(>Chisq)  
fit_lcs_extra_agesplit_config_ideal             
fit_lcs_extra_agesplit_weak_ideal      0.89147  
fit_lcs_extra_agesplit_strong_ideal    0.04393 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.042 -0.180 -1.963 0.050
d_extra_1 ~1 d_int_b -0.002 -0.007 -0.091 0.928
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.019 -0.080 -1.35 0.177
d_extra_1 ~1 d_int -0.019 -0.081 -1.35 0.177
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7765.423 7898.223 1 0 0.024

More pronounced change in ideal-self extraversion in older group. Significant difference in latent change score according to LRT.

Agreeableness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_ideal, fit_lcs_agree_agesplit_weak_ideal, fit_lcs_agree_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_agesplit_config_ideal 24 7296.5 7438.8 36.708                   
fit_lcs_agree_agesplit_weak_ideal   26 7298.2 7431.0 42.385     5.1777       2
fit_lcs_agree_agesplit_strong_ideal 30 7319.6 7433.4 71.817    28.0309       4
                                    Pr(>Chisq)    
fit_lcs_agree_agesplit_config_ideal               
fit_lcs_agree_agesplit_weak_ideal      0.07511 .  
fit_lcs_agree_agesplit_strong_ideal  1.229e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a -0.013 -0.045 -0.568 0.570
d_agree_1 ~1 d_int_b -0.013 -0.045 -0.701 0.483
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.013 -0.045 -0.884 0.377
d_agree_1 ~1 d_int -0.013 -0.045 -0.884 0.377
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7298.175 7430.975 0.992 0.039 0.035

Almost the same change in ideal-self agreeableness in both groups. LRT indicates some significant difference but this must be because of another parameter (main effect?).

Conscientiousness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_ideal, fit_lcs_consc_agesplit_weak_ideal, fit_lcs_consc_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_agesplit_config_ideal 24 6240.8 6383.1 32.891                   
fit_lcs_consc_agesplit_weak_ideal   26 6239.2 6372.0 35.345     2.0727       2
fit_lcs_consc_agesplit_strong_ideal 30 6239.8 6353.6 43.898     7.9806       4
                                    Pr(>Chisq)  
fit_lcs_consc_agesplit_config_ideal             
fit_lcs_consc_agesplit_weak_ideal      0.35474  
fit_lcs_consc_agesplit_strong_ideal    0.09229 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a -0.002 -0.006 -0.084 0.933
d_consc_1 ~1 d_int_b 0.012 0.039 0.625 0.532
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.007 0.023 0.451 0.652
d_consc_1 ~1 d_int 0.007 0.021 0.451 0.652
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 6239.246 6372.046 0.996 0.029 0.032

Very similar change in ideal-self conscientiousness in both groups. No significant differences according to the LRTs.

Neuroticism (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_ideal, fit_lcs_neuro_agesplit_weak_ideal, fit_lcs_neuro_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_agesplit_config_ideal 24 6591.7 6734.0 35.789                   
fit_lcs_neuro_agesplit_weak_ideal   26 6594.9 6727.7 43.048     4.9346       2
fit_lcs_neuro_agesplit_strong_ideal 30 6600.6 6714.4 56.714    13.4224       4
                                    Pr(>Chisq)   
fit_lcs_neuro_agesplit_config_ideal              
fit_lcs_neuro_agesplit_weak_ideal     0.084812 . 
fit_lcs_neuro_agesplit_strong_ideal   0.009386 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a 0.047 0.154 1.842 0.065
d_neuro_1 ~1 d_int_b 0.007 0.020 0.316 0.752
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.023 0.076 1.419 0.156
d_neuro_1 ~1 d_int 0.023 0.067 1.419 0.156
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 6594.945 6727.746 0.991 0.039 0.041

More pronounced change in ideal-self neuroticism in older group (but also not significant on its own). Significant difference in latent change score according to LRT.

Openness (ideal self): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_ideal, fit_lcs_openn_agesplit_weak_ideal, fit_lcs_openn_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_agesplit_config_ideal 24 7385.6 7527.8 47.160                   
fit_lcs_openn_agesplit_weak_ideal   26 7381.7 7514.5 47.306     0.1209       2
fit_lcs_openn_agesplit_strong_ideal 30 7385.1 7499.0 58.728    10.8469       4
                                    Pr(>Chisq)  
fit_lcs_openn_agesplit_config_ideal             
fit_lcs_openn_agesplit_weak_ideal      0.94133  
fit_lcs_openn_agesplit_strong_ideal    0.02834 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.012 0.066 0.817 0.414
d_openn_1 ~1 d_int_b 0.018 0.110 1.477 0.140
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.015 0.088 1.683 0.092
d_openn_1 ~1 d_int 0.015 0.095 1.683 0.092
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7381.703 7514.504 0.988 0.044 0.03

Similar change in ideal-self openness in both age groups (slightly stronger in younger group). LRT indicates significant difference (not sure why).

7.7.3.4 Summary of latent main effects split by age group
Show the code
params_agesplit_summary <- bind_rows(
  params_agesplit_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value)
) %>% mutate(group = ifelse(group=="d_int_a", "old", "young"))

kable(params_agesplit_summary, digits = 3)
trait self group beta p.value
extraversion current old 0.190 0.033
extraversion current young 0.391 0.000
extraversion ideal old -0.180 0.050
extraversion ideal young -0.007 0.928
agreeableness current old 0.172 0.028
agreeableness current young 0.142 0.071
agreeableness ideal old -0.045 0.570
agreeableness ideal young -0.045 0.483
conscientiousness current old 0.222 0.003
conscientiousness current young 0.251 0.000
conscientiousness ideal old -0.006 0.933
conscientiousness ideal young 0.039 0.532
neuroticism current old -0.348 0.000
neuroticism current young -0.428 0.000
neuroticism ideal old 0.154 0.065
neuroticism ideal young 0.020 0.752
openness current old 0.176 0.054
openness current young 0.298 0.000
openness ideal old 0.066 0.414
openness ideal young 0.110 0.140

Somewhat more pronounced changes in current-self personality in the younger age group, and more pronounced changes in ideal-self personality in the older age group (see extraversion!). However, a lot of this is only suggestive evidence (at p < .05), is not consistent across all traits, and does not replicate findings from Study 1. Difficult to interpret overall…